import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = {49, 38, 65, 97, 76, 13, 27, 49};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
/**
* 时间复杂度=n*递归调用的栈的深度
* 前面是n,是因为每一层调用划分都是不停地移动指针,把所有元素比较一边
* 最好时间复杂度:当选取的枢轴元素每次都能把数组几乎平均分成两部分时
* 此时时间复杂度:o(nlog2(n)),空间复杂度o(log2(n))
*
* 最坏时间复杂度:当待排序数组原本为正序或逆序时,每次划分都及其不均匀,
* 有一边一个元素也没有,这样递归调用栈的深度将达到n
* 此时时间复杂度o(n^2),空间复杂度o(n)
*
* 平均时间复杂度 o(nlog2(n)) 在各种排序算法中综合性能最好
*
* @param arr
* @param low
* @param high
*/
public static void quickSort(int[] arr,int low,int high){
if (low < high){
int postion = partition(arr,low,high);
quickSort(arr,low,postion-1);
quickSort(arr,postion+1,high);
}
}
public static int partition(int[] arr,int low,int high){
int pivot = arr[low];
while(low < high){
while(low < high && arr[high] >= pivot){
high--;
}
arr[low] = arr[high];
while(low<high && arr[low] <= pivot){
low++;
}
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
}
08-18
483
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
12-23
07-19
246
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交