前端之家收集整理的这篇文章主要介绍了
快排代码 《数据结构》,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <stdio.h>
/* C:
* 参照《数据结构》(C语言版)
* 调用:quicksort-->qsort-->partitions
* 原理,通过一趟扫描将要排序的数据分割成独立的两部分,* 其中一部分的所有数据都比另外一部分的所有数据都要小,* 然后再按此方法对这两部分数据分别进行快速排序,* 整个排序过程可以递归进行,以此达到整个数据变成有序序列
*/
/*
* arry : 待排数组
*/
int partitions(int arry[],int low,int high)
{
int pivotkey=arry[low];//枢纽数,以a[low]为
while(low < high)
{
while(low < high && arry[high] >= pivotkey) --high;//先high前移直到小于枢纽
arry[low]=arry[high];
while(low < high && arry[low] <= pivotkey) ++low;//low后移直到大于枢纽
arry[high]=arry[low];
}
//arry[low] = arry[0];
arry[low]=pivotkey;
return low;
}
void qsort(int arry[],int high)
{
int pivottag;
if(low<high)
{ //递归调用
pivottag=partitions(arry,low,high);
qsort(arry,pivottag-1);
qsort(arry,pivottag+1,high);
}
}
//arry :待排数组 n:排序数目
//e.g. quicksort(arry,10);
void quicksort(int arry[],int n)
{
qsort(arry,n-1);
}
int main (int argc,char* argv[])
{
int i = 0;
int arry[10] = {9,8,7,6,5,4,3,2,1,0};
for(i=0;i<10;i++)printf("%d\t",arry[i]);
printf("\n");
quicksort(arry,10);
for(i=0;i<10;i++)printf("%d\t",arry[i]);
printf("\n");
}