一、定义
快速排序是一种高效的排序算法,它基于分治的思想,通过递归地将数组分成两部分并分别排序,最终将它们合并起来。其时间复杂度为 O(nlogn)。
二、思路
1、选取中心轴,一般去最左边的数
2、扫描,比他大的放右边,比他小的放左边
3、第一次排序结束后、对中心轴的左右两边进行递归排序,步骤同上
三、快速排序为什么会被称作快速排序
快速排序之所以被称为快速排序,是因为它在平均情况下具有非常好的性能。具体来说,快速排序的平均时间复杂度为 O(nlogn),比许多其他排序算法都要快。当然,在最坏情况下,它的时间复杂度为 O(n^2),但这种情况出现的概率非常小。
快速排序的快速之处在于它采用了分治的思想,将数组分成两部分并分别排序,这样可以大大减少排序的时间。同时,快速排序还采用了选择一个基准值(pivot)的策略,将数组分成比基准值小和比基准值大的两部分,这样可以更快地将数组排序。
总之,快速排序的快速之处在于它采用了多种优化策略,使得在平均情况下具有非常好的性能。
public static void quickSort(int[] arr ,int low, int high){
if (low < high) {
int prove = partition(arr, low, high);
quickSort(arr, low, prove - 1);//左排
quickSort(arr, prove + 1, high);//右排
}
}
public static int partition(int[] arr, int low, int high){
int i,j;
int temp;
i = low;
j = high;
temp = arr[low];//中心轴
while(i < j){
// 从后面扫描,找到比temp小的书
while(i < j && temp <= arr[j]){
j--;
}
if(i < j){
arr[i] = arr[j];
i++;
}
// 从前边扫描,找比temp大的数
while (i < j && arr[i] < temp){
i++;
}
if(i < j){
arr[j] = arr[i];
j--;
}
}
arr[i] = temp;
return i;
}