排序查找算法性能比较.docx

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计报告 1.排序算法比较** 利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并统计每一种排序上机所花费的时间。提示:用顺序存储结构。  a)需求分析: 1.建立顺序表结构体 2.建立插入排序函数,参数为顺序表指针。 3.建立选择排序函数,参数为顺序表指针。 4.建立起泡排序函数,参数为顺序表指针。 5.建立快速排序函数,参数为顺序表指针,起始数据位置,结束数据位置。 6.主函数中使用循环结构给顺序表每个元素随机赋值,排序前后测定时间,并统计。 b)概要设计 1.void SelectSort(SqList *L) 此函数主要比较两个关键字的大小,将元素从一个位置移动至另一个位置。 首先,在待排序序列中选择出最小的记录,然后将这个最小的数据元素与第一个记录交换,第一个记录到位,这叫做第一趟排序; 第二趟,就是从第二个记录到最后一个记录中选择最小的记录,之后将最小的记录与第二个记录交换,第二个记录到位; 以此类推,进行n-1趟,序列就有序了。 2.void InsertSort(SqList *L) 在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序地插入到已排好序的记录子集中,直到将所有待排记录全部插入为止。 3.void QSort(SqList *L, int s, int t) (1) 先从数列中取出一个数作为基准数(该记录称为枢轴)。 (2) 将比基准数大的数全放到它的右边,小于或等于基准数的全放到它的左边。 (3) 再对左右两部分重复第(2)步,直到各区间只有一个数,达到整个序列有序。 void BubbleSort(SqList *L) 每趟不断将记录两两比较,并按“前小后大”(或“前大后小”)规则交换。每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素;一旦下趟没有交换发生,还可以提前结束排序。 void main() 在主函数里建立顺序表。每次调用函数前使用循环结构使用随机函数一一赋值。在调用排序函数前后统计时间并输出所用时间。 c)详细设计 #includestdio.h #includestdlib.h #includetime.h #define MAXSIZE 30001 typedef int KeyType; typedef struct { KeyType key; }RecordType; typedef struct { RecordType r[MAXSIZE]; int length; }SqList; void SelectSort(SqList *L) { /*对顺序表L作简单选择排序*/ RecordType temp; for(int i=1; iL-length; ++i) { int j=i; for(int k=i+1; k=L-length; k++) if(L-r[k].keyL-r[j].key) j=k; if(i!=j) { temp=L-r[j]; L-r[j]=L-r[i]; L-r[i]=temp; } } } void InsertSort(SqList *L) { /*对顺序表L作插入排序*/ for(int i=2; i=L-length; ++i) if(L-r[i].keyL-r[i-1].key) { L-r[0]=L-r[i]; /*将待插入记录复制为哨兵*/ int j=i-1; while(L-r[0].keyL-r[j].key) { L-r[j+1]=L-r[j]; /*记录后移*/ j--; } L-r[j+1]=L-r[0]; /*插入到正确位置*/ } } int Partition(SqList *L,int low,int high) //快速排序 { L-r[0]=L-r[low]; /*将枢轴记录移至数组的闲置分量*/ int pivotkey=L-r[low].key; /*枢轴记录关键字*/ while(lowhigh) /*从表的两端交替地向中间扫描*/ { while(lowhighL-r[high].key=pivotkey) /*从右向左扫描*/ --high; L-r[low++]=L-r[high]; /*将比枢轴记录小的记录移到低端*/

文档评论(0)

kbook + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档