快排代码 《数据结构》

#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 low,int high)
{
	int pivottag;
	
	if(low<high)
	{ //递归调用
	
		pivottag=partitions(arry,low,high);
		qsort(arry,low,pivottag-1);
		qsort(arry,pivottag+1,high);
	}
}

//arry :待排数组 n:排序数目
//e.g. quicksort(arry,10);
void quicksort(int arry[],int n)
{
	qsort(arry,0,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");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值