C语言数据结构 快速排序 源码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Quick Sort 程序已就绪,可直接编译运行

#include

#include

#include

#define OK 1

#define TRUE 1

#define ERROR 0

#define FALSE 0

#define OVERFLOW -2

#define MAXSIZE 100

typedef int Status;

typedef int KeyType; //定义关键字类型为整数型typedef int InfoType;

typedef struct

{

KeyType key; //关键字项

InfoType info; //其他记录项

}RedType; //记录类型

typedef struct

{

RedType r[MAXSIZE+1]; //r[0]闲置或用作哨兵单元

int length; //顺序表长度

}SqList; //顺序表类型

int Partition(SqList &L,int low,int high)

{//交换顺序表L中子表L.r[low..high]的记录,使枢轴记录到位,并返回其所在位置

//此时在它之前(后)的记录均不大(小)于它。

KeyType pivotkey;

L.r[0]=L.r[low]; //用子表的第一个记录作枢轴记录

pivotkey=L.r[low].key; //枢轴记录关键字

while(low

{

while(low=pivotkey)--high;

L.r[low]=L.r[high]; //将比枢轴记录小的记录移到低端

while(low

L.r[high]=L.r[low]; //将比枢轴记录大的记录移到高端

}

L.r[low]=L.r[0]; //枢轴记录到位

//count++;

return low; //返回枢轴位置

}

void QSort(SqList &L,int low,int high,int &count)

{//对顺序表L中的子序列L.r[low..high]作快速排序

int pivotloc,i;

if(low

{

pivotloc=Partition(L,low,high); //将L.r[low..high]一分为二

count++; //记录划分次数

QSort(L,low,pivotloc-1,count); //对低子表递归排序,pivotloc是枢轴位置

QSort(L,pivotloc+1,high,count); //对高子表递归排序}

//count++;

}

void QuickSort(SqList &L,int &count)

{//对顺序表L作快速排序

QSort(L,1,L.length,count);

}

int main()

{

int i,len,again,count=0;

SqList L;

printf("即将进行快速排序\n\n请输入将要排序的数字个数:");

scanf("%d",&len);

L.length=len;

printf("\n\n请输入数字序列,以空格间隔,回车结束:");

for(i=1;i<=len;i++)

scanf("%d",&L.r[i].key);

QuickSort(L,count);

printf("\n\n有序序列为:");

for(i=1;i<=len;i++)

printf("%d ",L.r[i].key);

printf("\n\n一共进行了%d次划分",count);

printf("\n\n本组排序已结束,希望再进行新的一组排序吗?(0:否1:是):");

scanf("%d",&again);

if(again)

{

printf("\n\n");

return main();

}

else if(!again) return 0; }

相关文档
最新文档