一、算法思想
通过一趟排序将待排序的记录分为独立的两部分,其中一部分是记录关键字均不大于另外一部分关键字,然后再分别对这两部分记录继续进行快速排序,以达到整个序列有序
二、算法举例
50 10 90 30 70 40 80 60 20
三、算法实现
//快速排序
void QuickSort(int *data,int low,int high)
{
int i,j;
int pivotkey;//驱轴元素
if(low < high){
pivotkey = data[low];
i = low;
j = high;
//从数组的两端交替地向中间扫描
while(i<j){
while(i<j&&data[j] >= pivotkey){
j--;
}
if(i<j){
data[i++] = data[j]; //比驱轴元素小者移到底下标端
}
while(i<j&&data[i] <= pivotkey){
i++;
}
if(i<j){
data[j--] = data[i]; //比驱轴元素大者移到高下标端
}
}
data[i] = pivotkey;//驱轴元素移到正确位置
QuickSort(data,low,i-1);//对前半个子表快速排序
QuickSort(data,i+1,high);//对后半个子表快速排序
}
}
四、算法复杂度分析
快速排序是不稳定的排序方法,其平均时间复杂度为O(nlogn),空间复杂度为O(logn),若初始记录序列按关键字
有序或基本有序,快速排序则退化为冒泡排序。算法复杂度为O(n^2)