快排代码 《数据结构》

#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");
}

相关文章

【啊哈!算法】算法3:最常用的排序——快速排序       ...
匿名组 这里可能用到几个不同的分组构造。通过括号内围绕的正...
选择排序:从数组的起始位置处开始,把第一个元素与数组中其...
public struct Pqitem { public int priority; ...
在编写正则表达式的时候,经常会向要向正则表达式添加数量型...
来自:http://blog.csdn.net/morewindows/article/details/6...