快速排序算法不稳定。
快速排序算法在大多数的计算机上运行得都比其他排序算法快,而且排序算法消耗资源少。就平均时间而言快排是所有内部排序中最好的一个。对于已经排好的数组,最速排序有最坏时间复杂度为o(n^2)。当数组长度很小时,快排往往比其他排序方法要慢。
快排的代码,关键是parition算法。
void QuickSort(int arr[],int low,int high)
{
if(low<high){
int pivotPos = partion(arr,low,high);
QuickSort(arr,low,pivotPos-1);
QuickSort(arr,pivotPos+1,high);
}
}
Paition的三种实现方法
(1)arr[low]的第一个元素为pivot,设两个指针lessIndex=low(该索引之前的数比pivot小,初始值为low),另一个i从low+1开始遍历数组,找到一个比pivot小的数,lessIndex+1,然后交换到前面来。
int partion1int arr[],int low,int high)
{
if(!arr||low<0||low>high)
throw new exception("NULL Array");
//left第一个元素被当做pivot
int pivot = arr[low];
int lessIndex = low;
for(int i=low+1;i<=high;++i){
if(arr[i]<pivot){
lessIndex++;
if(lessIndex!=i){
int temp = arr[lessIndex];
arr[lessIndex] = arr[i];
arr[i] = temp;
}
}
}
//这一步破坏了稳定性
arr[low] = arr[lessIndex];
arr[lessIndex] = pivot;
return lessIndex;
}
&#