分治法-----快速排序算法

对于分治法实现的快速排序算法,就是使用分治的思想,使用递归算法实现的,用递归来实现快速排序很容易理解,主要是怎样在每趟排序中将一个元素归位,确定基准元素。

#include <stdio.h>
#define MAXE 20			//线性表中最多元素个数
typedef int KeyType;
typedef char InfoType[10];
typedef struct			//记录类型
{	
	KeyType key;		//关键字项
    InfoType data; 		//其他数据项,类型为InfoType
} RecType;
int n;
void QuickSort(RecType R[],int s,int t) //对R[s]至R[t]的元素进行快速排序
{
	int i=s,j=t,k;
	RecType temp;
	if (s<t) 					//区间内至少存在一个元素的情况
	{	
		temp=R[s];     			//用区间的第1个记录作为基准
        while (i!=j)  			//从区间两端交替向中间扫描,直至i=j为止
		{	
			while (j>i && R[j].key>temp.key) 
			    j--;  			//从右向左扫描,找第1个关键字小于temp.key的R[j]
			R[i]=R[j];
            while (i<j && R[i].key<temp.key) 
			    i++;			//从左向右扫描,找第1个关键字大于temp.key的记录R[i] 
			R[j]=R[i];
		}
		R[i]=temp;
		printf(" 划分区间为R[%d..%d],结果为:",s,t);	//输出每一趟的排序结果
		for (k=0;k<10;k++)
			if (k==i)
				printf(" [%d]",R[k].key);
			else
				printf("%4d",R[k].key);
		printf("\n");
		QuickSort(R,s,i-1);		//对左区间递归排序
		QuickSort(R,i+1,t);		//对右区间递归排序
	}
}
int main()
{
	int i,k;
	n=10;
	KeyType a[]={6,8,7,9,0,1,3,2,4,5};
	RecType R[MAXE];
	for (i=0;i<n;i++)
		R[i].key=a[i];
	printf("初始关键字: ");			//输出初始关键字序列
	for (k=0;k<n;k++)
		printf("%4d",R[k].key);
	printf("\n");
	QuickSort(R,0,n-1);
	printf("最后结果:  ");			//输出初始关键字序列
	for (k=0;k<n;k++)
		printf("%4d",R[k].key);
	printf("\n");
	 
	
	scanf("%d",&i);
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值