***快速排序是所有内部排序算法中平均性能最优的排序算法***
因而这个算法无论在考试还是面试找工作中都相当相当重要
- 快排的平均时间复杂度为O(nlog2n),最差时间复杂度为O(n2)
- 快排的平均空间复杂度为O(log2n),最差空间复杂度为O(n)
- 快排是不稳定的
//Java快排实现
private void QuickSort(int A[],int low,int high){ //设n为数组A的长度,当初始low设置为0,high设置为n-1时,可将整个数组排序
if(low<high){
int pos=Partition(A,low,high); //经一次快排后,pos位置元素被放到其正确位置上,在其左侧元素都比其小,在其右侧元素都比其大
QuickSort(A,low,pos-1); //每次递归调用都给一个元素找到其正确位置
QuickSort(A,pos+1,high);
}
}
private int Partition(int A[],int low,int high){
int temp=A[low];
while(low<high){
while(low<high&&A[high]>=temp)
high--;
A[low]=A[high]; //将小于数轴值temp的值,向"low"的方向(也就是下标小的位置)移动
while(low<high&&A[low]<=temp)
low++;
A[high]=A[low]; //将大于数轴值temp的值,向"high"的方向(也就是下标大的位置)移动
}
A[low]=temp;
return low;
}