快速排序是对起泡排序的一种改进。它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字都比另一部分的关键字小,
然后再对这两部分记录再次进行排序,直至达到整个序列有序。
贴上它的C语言下的实现代码:
#include<stdio.h>
int partition(int *,int,int);
void QSort(int *,int,int);
int partition(int *a,int low,int high){
int temp;
int devi;
devi=a[low];
while (low<high)
{
while (low<high&&a[high]>=devi)--high;
a[low]=a[high];
while(low<high&&a[low]<=devi)++low;
a[high]=a[low];
}
a[low]=devi;
return low;
}
void QSort(int *a,int low,int high){
int pivo;
if(low<high){
pivo=partition(a,low,high);
QSort(a,low,pivo-1);
QSort(a,pivo+1,high);
}
}
int main(){
int i,j;
int a[]={10,3,4,8,7,6,5,4,3,2,1,43,32,112,4,6,545,23};
j=sizeof(a)/sizeof(a[0]);
printf("%d\n",j);
QSort(a,0,j-1);//一位偏移
for (i=0;i<j;i++)
{
printf("%d,",a[i]);
}
printf("\n");
return 0;
}
经验证明:就平均时间而言,快速排序的目前认为最好的一种内部排序方法。在所有的同数量级(O(nlogn))的排序算法中,其平均性能是最好的 ,当然,若初始记录
按关键字有序或基本有序,则快速排序将蜕化为起泡排序,这样时间复杂度将变为O(n2)。所以,我们对于其中的关键字的选取这显的重要了,经验证明,采取取中的规则
可以大大改善快速排序的性能。