快速排序是一种排序算法,对包含n个数的输入数组,最坏情况运行o(n*n),快速排序通常是用于排序的最佳实用选择,这是因为其平均性能相当好:期望的运行时间为o(nlgn)。其中隐含的常数因子很小。另外,它能进行就地排序,在虚存环境中也能很好地工作。(详见算法导论p145)
对数组v[left......right]进行从小到大快速排序
void qsort(int v[],int left ,int right)
{
int i,last;
void swap(int v[],int i, int j);
if (left>=right)
return;
swap(v,left,(left+right)/2);
last=left;
for(i=left+1;i<=right;i++)
if (v[i]<v[left])
swap(v,++last,i);
swap(v,left,last);v[j];
qsort(v,left,last-1);
qsort(v,last+1,right);
}
void swap(int v[],int i,int j)
{
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
C程序如下
#include <stdio.h>
void swap(int v[],int i,int j)
{
int temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
int partition(int v[],int left,int right)
{
int i,j,key;
int temp;
key=v[right];
i=left-1;
for(j=left;j<right;j++)
if(v[j]<=key)
{
i++;
swap(v,i,j);
}
swap(v,i+1,j);
return i+1;
}
void qsort(int v[],int left,int right)
{
int q,length;
length=sizeof(v)/sizeof(int);
if(left<right)
{
q=partition(v,left,right);
qsort(v,left,q-1);
qsort(v,q,right);
}
}
int main()
{
int i,v[10];
printf("Enter number: \n");
for(i=0;i<10;i++)
scanf("%d",&v[i]);
qsort(v,0,9);
printf("After sort:\n");
for(i=0;i<10;i++)
printf("%d ",v[i]);
printf("\n");
}