快速排序原文链接
快速排序是一种对冒泡排序改进交换排序。

思想
通过一趟排序将数组分成两个部分,一部分的元素都比另外一个部分要小。然后在用相同的方法对这两个部分排序。可以采用递归的方式使整个数组有序。
排序流程

动图

代码
public static void quickSort(int arr[],int left,int right){
if(left>=right){
return;
}
int start=left;
int end=right;
int key=arr[left];
while(left<right){
while(left<right && arr[right]>=key){
right--;
}
arr[left]=arr[right];
while(left<right && arr[left]<=key){
left++;
}
arr[right]=arr[left];
}
arr[left]=key;
quickSort(arr,start,left-1);
quickSort(arr,left+1,end);
}
复杂度
如果带排数据本身就是有序的,那么快排的复杂度是O(n) 快排只是在数据随机的情况下,平均情况下效率最高。至于选择哪个数据作为分区的依据,因为数据是随机的,那么中间还是开头其实都一样。 快排平均复杂度是O(logN),最坏情况是逆序,那么就是O(n^2)
稳定性
在快速排序中,相等元素可能会因为分区而交换顺序,所以它是不稳定的算法。