#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.当原纪录无序时跟其他方法中,快速排序是最好的一种
排序算法------快速排序
最新推荐文章于 2021-06-21 22:36:21 发布