快速排序(Quick Sort)
原理:从数列中挑出一个元素,称为 “基准”(pivot)。重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
逻辑代码
public class QuickSort {
public static void main(String[] args) {
int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};
quick(arr,0,arr.length-1);
Utils.printArr(arr);
}
static void quick(int[] arr,int left,int right) {
if(left>right) return;
int i = left;
int j = right;
int temp = arr[left];
while (i < j) {
//从右边查找小于基准值的数
while (i < j && arr[j] >= temp) {
j--;
}
//从左边开始查找大于基准值的数
while (i < j && arr[i] <= temp) {
i++;
}
if (i < j) {
//交换找到的两个数
Utils.swap(arr,i,j);
}
}
//交换基准值和最终位置下标的对应的数
arr[left] = arr[i];
arr[i]=temp;
//递归
quick(arr,left,i-1);
quick(arr,i+1,right);
}
}
2.演示图:
演示图片为转载,转载地址:https://www.runoob.com/w3cnote_genre/algorithm
总结
时间复杂度(平均) | 时间复杂度(最好) | 时间复杂度(最坏) | 空间复杂度 | 稳定性 |
---|---|---|---|---|
O(nlog2n) | O(nlog2n) | O(n²) | O(nlog2n) | 不稳定 |