数据结构课程设计(内部排序算法比较_C语言).doc_第1页
数据结构课程设计(内部排序算法比较_C语言).doc_第2页
数据结构课程设计(内部排序算法比较_C语言).doc_第3页
数据结构课程设计(内部排序算法比较_C语言).doc_第4页
数据结构课程设计(内部排序算法比较_C语言).doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课题:内部排序算法比较 第一章 问题描述 排序是数据结构中重要的一个部分,也是在实际开发中易遇到的问题,所以研究各种排算法的时间消耗对于在实际应用当中很有必要通过分析实际结合算法的特性进行选择和使用哪种算法可以使实际问题得到更好更充分的解决!该系统通过对各种内部排序算法如直接插入排序,冒泡排序,简单选择排序,快速排序,希尔排序,堆排序、二路归并排序等,以关键码的比较次数和移动次数分析其特点,并进行比较,估算每种算法的时间消耗,从而比较各种算法的优劣和使用情况!排序表的数据是多种不同的情况,如随机产生数据、极端的数据如已是正序或逆序数据。比较的结果用一个直方图表示。第二章 系统分析 界面的设计如图所示: |*|-欢 迎 使 用-| |-(1)随 机 取 数-| |-(2)自 行 输 入-| |-(0)退 出 使 用-| |*| 请 选 择 操 作 方 式: 如上图所示该系统的功能有: (1):选择1 时系统由客户输入要进行测试的元素个数由电脑随机选取数字进行各种排序结果得到准确的比较和移动次数并打印出结果。 (2)选择2 时系统由客户自己输入要进行测试的元素进行各种排序结果得到准确的比较和移动次数并打印出结果。 (3)选择0 打印“谢谢使用!”退出系统的使用!第三章 系统设计 (I) 友好的人机界面设计:(如图3.1所示)|*|-欢 迎 使 用-| |-(1)随 机 取 数-| |-(2)自 行 输 入-| |-(0)退 出 使 用-| |*| (3.1) (II)方便快捷的操作:用户只需要根据不同的需要在界面上输入系统提醒的操作形式直接进行相应的操作方式即可!如图(3.2所示)|*|-欢 迎 使 用-| |-(1)随 机 取 数-| |-(2)自 行 输 入-| |-(0)退 出 使 用-| |*| 请 选 择 操 作 方 式:(用户在此输入操作方式) (3.2) (III)系统采用定义结构体数组来存储数据 。 (IV)功能介绍:(1)操作功能:a .当用户选择随即电脑随机取数时系统将弹出请输入你要输入的个数 :(用户在此输入要电脑取数的个数) 要是用户输入的数据过大系统将提醒错误超出范围重新输入! b . .当用户选择自行输入时 系统将弹出请输入你要输入的个数(不大于于30的整数): 当用户输完元素的个数之后系统将提示用户依次输入各个元素。 请输入各个元素:(2) 排序功能:系统有 简单选择排序,冒泡排序,堆排序,二路归并排序,快速排序的功能。(3)打印清晰:系统会打印出在排序操作之前电脑随机取数或者用户输入的原始排列顺序;并将排序操作之后的有序数据打印在原始数据的下面以便用户的对比。在排序操作结束之后系统将以直方图的形式打出排序过程中比较和移动次数让客户一目了然地看到排序的结果: 比 较 结 果 排序方式比较次数移动次数 直 接简单选择冒 泡堆 排 序 直 接快 速 第四章 系统实现(一)定义结构体数组:typedef struct int key; datatype; datatype RMAXNUM;/定义结构体数组(二)直接排序: void D_InsertSort(datatype R , int n)/直接排序 int i,j; for(i=2; i=n; i+) cn0+; if (Ri.keyRi-1.key) R0=Ri; mn0+; for(j=i-1; R0.keyRj.key; j-)Rj+1=Rj; Rj+1=R0; mn0+=2; (三)简单选择排序:void Select_Sort(datatype R ,int n)/简单选择排序 int i,j,k; for(i=1;in;i+) k=i;for(j=i+1; j=n; j+) cn1+; if(Rj.keyRk.key) k=j; if (i=k) R0=Rk; Rk=Ri; Ri=R0; mn1+=3; (四)冒泡排序:void Bubble_Sort (datatype R , int n)/冒泡排序 int i, j; int swap; for(i=1; in-1; i+) swap=0; for(j=1; j=n-i; j+) cn2+; if (Rj.keyRj+1.key) R0=Rj; Rj=Rj+1; Rj+1=R0; mn2+=3; swap=1; if(swap=0) break; (五)堆排序:void HeapAdjust(datatype R , int s, int t) datatype rc; int i,j ; rc=Rs; i=s; for(j=2*i; j=t; j=2*j) cn3+; if(jt & Rj.key Rj.key) break; Ri=Rj; mn3+; i=j; Ri=rc;void HeapSort(datatype R , int n)/堆排序 int i; for(i=n/2; i0; i- ) HeapAdjust(R, i, n); for(i=n; i1; i-) R0=R1; R1=Ri; Ri=R0; mn3+=3; HeapAdjust(R,1, i-1); (六)归并排序: void Merge(datatype R , datatype R1 , int s, int m , int t) int i,j,k; i=s; j=m+1; k=s; while (i=m&j=t) cn4+; if(Ri.keyRj.key) R1k+=Ri+; mn4+; else R1k+=Rj+; mn4+; while (i=m) R1k+=Ri+; mn4+; while (j=t) R1k+=Rj+; mn4+;void MSort(datatype R , datatype R1 , int s, int t) int m; if(s=t) R1s=Rs; mn4+; else m=(s+t)/2; MSort(R, R1, s, m); MSort(R, R1, m+1, t); Merge(R1, R, s, m, t); void MergeSort(datatype R , datatype R1 , int n)/归并排序 MSort(R, R1,1, n); int Partition(datatype R , int low, int high) R0=Rlow; mn5+; while(lowhigh) while(low=R0.key) cn5+; high-; if(lowhigh) Rlow=Rhigh; low+; mn5+; while(lowhigh&Rlow.keyR0.key) mn5+; low+; if(lowhigh) Rhigh=Rlow; high-; mn5+; Rlow=R0; mn5+; return low;(七)快速排序:void Quick_Sort(datatype R , int s, int t)/快速排序 int i; if( st ) i = Partition(R, s, t); Quick_Sort(R, s, i-1); Quick_Sort(R, i+1, t); void prin(datatype R,int n) int i ; printf(排序的结果为:); for(i=1;i25) printf(超出范围重新输入!n); goto a; addlist(R,n); printf(排序前元素顺序为:); for(i=1;in+1;i+) printf(%d ,Ri.key); printf(n); D_InsertSort(R,n);/直接排序 prin(R,n); Select_Sort(R,n);/简单选择排序 Bubble_Sort(R, n);/冒泡排序 HeapSort(R, n);/堆排序 datatype R1MAXNUM=0; MergeSort(R, R1, n);/二路归并排序 Quick_Sort(R,0, n);/快速排序 (九)用户自行输入: void zixing_input() int n,i; datatype R1MAXNUM=0; printf(请输入你要输入的个数(不大于于30的整数):); scanf(%d,&n); printf(请输入各个元素:); for(i=1;in+1;i+) scanf(%d,&R1i.key); printf(排序前元素顺序为:); for(i=1;in+1;i+) printf(%d ,R1i.key); printf(n); D_InsertSort(R1,n);/直接排序 prin(R1,n); Select_Sort(R1,n);/简单选择排序 Bubble_Sort(R1, n);/冒泡排序 HeapSort(R1, n);/堆排序 datatype R2MAXNUM=0; MergeSort(R1, R2, n);/二路归并排序 Quick_Sort(R1,0, n);/快速排序 (十)主函数调用: int main(void) int s; printf( |*|n); printf( |-欢 迎 使 用-|n); printf( |-(1)随 机 取 数-|n); printf( |-(2)自 行 输 入-|n); printf( |-(0)退 出 使 用-|n); printf( |*|n); printf( 请 选 择 操 作 方 式: ); scanf(%d,&s); switch(s) case 1: system(cls) ; sui_ji(); break; case 2: system(cls) ; zixing_input(); break; case 0: printf( 谢谢使用! ); exit(0); break; printf(n );printf( 比 较 结 果 n);printf( n);printf( 排序方式 比较次数 移动次数n);printf( n);printf( 直 接 %d %d n,cn0,mn0);printf( n);printf( 简单选择 %d %d n,cn1,mn1);printf( n);printf( 冒 泡 %d %d n,cn2,mn2);printf( n);printf( 堆 排 序 %d %d n,cn3,mn3); printf( n); printf( 二路归并 %d %d n,cn4,mn4); printf( n); printf( 快 速 %d %d n,cn5,mn5); 第五章 系统测试 (一) 随机取数的测试: (二)自行输入的测试:(三)退出系统:(四)时间的估算: 排序方法平均时间性能最好时间性能最坏时间性能 直 接O(n2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论