网站提速怎么做/seo优化技术招聘
什么是快速排序?为什么要有快速排序?怎么实现快速排序?
- 快速排序是一种思想,先找出一个基准数(索引为0的位置) 先循环一次,然后 从右往走找出比基准数小的。然后停止再次从左边走找出比基准数大的 然后停止,交换两数的位置,直到两指针相遇。这样循环一遍后 两指针相遇的地方左边都是比基准数小的 ,右边都是比基准数大的,接着递归 先左右后。
- 开始学习数组的时,冒泡、插入、选择排序作为排序的最基本、最容易理解的排序。但是在数组量增大后 其缺点也显示了出来,时间复杂度为O(n)²,太慢,所有衍生出了一种更快的排序方法:快排
- 代码:这里写出了两路快排 比基准数大和比基准数小的
/*** @param arr 需要排序的数组* @param left 需要快排的起始位置* @param right 需要快排的结束位置*/public static void quickSort(int[] arr, int left, int right) {//left不能比right大//进行判断 如果right比left大,直接returnif (left > right) return;//数组不能为空if (arr == null || arr.length == 0) return;//定义基准数 数组的最左边int base = arr[left];//定义变量i 指向最左边int i = left;//定义变量j 指向最右边int j = right;//i j 双指针 依次向他们相对的放心走//当i和j不相遇的时候,依次循环while (i != j) {//先由j从右往走 检索比基准数base小的 然后停下while (arr[j] >= base && i < j) {j--;}//i从左往右,检索比基准数base大的 然后停下while (arr[i] <= base && i < j) {i++;}//条件成立后 交换i和j的位置的元素int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}//如果while的条件不成立,那么会跳出循环,此时i和j相遇//相遇后交换基准数和相遇位置的元素交换arr[left] = arr[i];arr[i] = base;//左边的都比base小 右边的都比base大//然后开始排基准数左边 然后排基准数右边//左边quickSort(arr,left,i-1);//i的位置是前一个基准数,不用排序//右边quickSort(arr,i+1,right);}
排序所需时间: