快速排序:
把一趟排序序列分成两个部分,前者小于某值,后者大于某个值。之后再分别进行快速排序。用到了递归和分治的思想。
#include<stdio.h>
#include<stdlib.h>
#define len 8
int Partition( int d[],int low,int high)
{
int t;
t = d[low];
while(low<high)
{
while(low<high && d[high]>=t ) --high;
d[low] = d[high];
while( low<high && d[low]<=t ) ++low;
d[high] = d[low];
}
d[low] = t;
return low;
// for(int k=0;k<len;k++)
// printf("%d\n",d[k]);
}
void QSort(int *d,int low,int high)
{ //对顺序表中的子序列作快速排序
int pivotloc;
if( low <high )
{
pivotloc = Partition(d,low,high);
QSort(d,low,pivotloc-1);
QSort(d,pivotloc+1,high);
}
}
void QuickSort(int *d)
{
QSort(d,0,len-1);
}
int main()
{
int d[len] = {49,38,65,97,76,13,27,49};
QuickSort(d);
for(int k=0;k<len;k++)
printf("%d\n",d[k]);
return 0;
}