排序算法------快速排序

#include<stdio.h>
#include<stdlib.h>

#define Status int 
#define  max 20
typedef struct {
  Status key;
}ElemType;
typedef struct {
  ElemType  r[max];
  int length;
}Sqlist;
void  Inital(Sqlist &L)   //初始化
{
	L.r[1].key=49;
	L.r[2].key=38;
	L.r[3].key=65;
	L.r[4].key=97;
	L.r[5].key=76;
	L.r[6].key=13;
	L.r[7].key=27;
	L.r[8].key=49;
	L.length=8;
}
bool LT(int i,int j)  
{
	if(i<j)
		return true;
	else return false;
}
int Partition(Sqlist &l,int low ,int high)   //一趟排序(将原有序列分为两部分)
{
	int pivotkey;
	l.r[0]=l.r[low];
	pivotkey=l.r[low].key;      //记录关键字
	while(low<high)
	{
		while(low<high&&l.r[high].key>=pivotkey) --high;   //从序列的右端起找到第一个比关键字小的记录
		l.r[low]=l.r[high];        //将这个小的记录放在之前低位
		while(low<high&&l.r[low].key<=pivotkey) ++low;  //从序列的左端起找到第一个比关键字大的记录
		l.r[high]=l.r[low];//将这个大的记录放在之前的位置上
	}
	l.r[low]=l.r[0]; //找到关键字正确的所在位置
	return low;     //返回关键字位置
}
void QSort(Sqlist &l,int low,int high)   //快速排序函数
{
	int pivotkey;
	if(low<high){
	  pivotkey =Partition(l,low,high);//找到关键字正确位置
	  QSort(l,low,pivotkey-1);  //依照关键字位置将原序列分为两部分,在递归,分治
	  QSort(l,pivotkey+1,high);
	}
}
void QuickSort(Sqlist &l)    //快速排序函数
{
	QSort(l,1,l.length);
}
void print(Sqlist l)
{
	int i;
	printf("排序后的结果为:");
	for(i=1;i<=l.length;i++)
	{
		printf("%d  ",l.r[i].key);
	}
}
void main()
{
	Sqlist l;
	Inital(l);
	QuickSort(l);
	print(l);
	getchar();
	getchar();
}
//算法分析:1.时间复杂度为O(nlogn)
          //2.当原纪录无序时跟其他方法中,快速排序是最好的一种


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值