数据结构课程设计报告排序算法演示系统

上传人:yh****1 文档编号:125954147 上传时间:2020-03-21 格式:DOC 页数:31 大小:356.50KB
返回 下载 相关 举报
数据结构课程设计报告排序算法演示系统_第1页
第1页 / 共31页
数据结构课程设计报告排序算法演示系统_第2页
第2页 / 共31页
数据结构课程设计报告排序算法演示系统_第3页
第3页 / 共31页
数据结构课程设计报告排序算法演示系统_第4页
第4页 / 共31页
数据结构课程设计报告排序算法演示系统_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《数据结构课程设计报告排序算法演示系统》由会员分享,可在线阅读,更多相关《数据结构课程设计报告排序算法演示系统(31页珍藏版)》请在金锄头文库上搜索。

1、1. 设计目的随着计算机技术的发展,各种排序算法不断的被提出。排序算法在计算机科学中有非常重要的意义,且应用很广泛。在以后的发展中排序对我们的学习和生活的影响会逐渐增大,很有必要学习排序知识。此次课程设计一方面使自己掌握排序的知识,另一方面锻炼一下团队合作开发系统的能力。2.1 设计内容和要求设计内容:(1)实现各种内部排序。包括直接插入排序,希尔排序,冒泡排序,快速排序,直接选择排序,归并排序,堆排序。(2)待排序的元素的关键字为整数或(字符)。可用随机数据和用户输入数据作测试比较。比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换以3次计)。(3)演示程序以人机对话的形式进行

2、。每次测试完毕显示各种比较指标值的列表,以便比较各种排序的优劣。3. 本设计所采用的数据结构typedef struct int key;RecType;4. 功能模块详细设计4.1 详细设计思想主函数:#include#include#include #define L 8 /排序元素个数#define FALSE 0#define TRUE 1typedef struct int key; RecType;RecType RL;int num; int sum;int sun; /定义排序趟数的全局变量 /主函数int main() Seqlist S; int i,k; char ch1

3、,ch2,q; printf(ntt 排序算法演示系统nntt请输入%d个待排序的数据:,L);for(i=1;i=L;i+) scanf(%d,&Si.key); getchar(); printf(tt); ch1=y; while(ch1=y) printf(n); printf(ntt 菜 单 n); printf(ntt*n); printf(ntt 1-更新排序数据 2-直接插入排序 n); printf(ntt 3-希 尔 排 序 4-冒 泡 排 序 n); printf(ntt 5-快 速 排 序 6-直接选择排序 n); printf(ntt 7-堆 排 序 8-归 并 排

4、序 n); printf(ntt * 0-退 出 * n); printf(ntt*n); printf(ntt请选择:); scanf(%c,&ch2); getchar(); for(i=1;i=L;i+) Ri.key=Si.key; switch(ch2) case 1: printf(ntt请输入%d个待排序数据ntt,L); for(i=1;i=L;i+) scanf(%d,&Si.key); getchar(); printf(tt); printf(ntt数据输入完毕!); break; case 2: Insertsort(); break; case 3: Shellsor

5、t(); break; case 4: Bubblesort(); break; case 5: printf(ntt原始数据为(按回车键开始排序):ntt); for(k=1;k=L;k+) printf(%5d,Rk.key); getchar(); printf(n); num=0;sun=0;sum=0; Quicksort(1,L); printf(ntt排序最终结果是:ntt); for(k=1;k=L;k+) printf(%5d,Rk.key); printf(ntt比较次数是:%dntt,sum);printf(ntt交换次数是:%dntt,sun); break; case

6、 6: Selectsort(); break; case 7: Heap(); break;case 8: Mergesort(); break; case 0: ch1=n; break; default: system(cls);/清屏 printf(ntt对不起,您输入有误,请重新输入!n); break; if(ch2!=0) if(ch2=2|ch2=3|ch2=4|ch2=5|ch2=6|ch2=7|ch2=8) printf(nntt排序完毕!); printf(ntt按回车键继续!); q=getchar(); if(q!=n) getchar(); ch1=n; retur

7、n 1;/系统主界面4.1.1 冒泡排序核心思想 依次比较相邻的两个数,将小数放在前面,大数放在后面,第一轮比较后,最大的数便被放到了最后;第二轮操作前n-1个数据(假设有n个数据),依然是依次比较相邻的两个数,将小数放在前面,大数放在后面,倒数第二个数便是第二大的数;同理第i轮操作前n-i+1的数据(假设i取值是从1开始的),则n-i+i位置上的数据为第i大的数据。一共有n-1轮,第i轮比较中共比较n-i次比较。核心代码void Bubblesort() int i,j,k,x=0,y=0,m=0; int exchange=TRUE;/标志位exchange初始化为TRUE 1 print

8、f(ntt原始数据为(按回车键开始排序):ntt); for(k=1;k=L;k+) printf(%5d,Rk.key); getchar(); printf(n); for(i=1;iL&exchange=TRUE;i+)/外层对总的循环次数执行次数 exchange=FALSE; for(j=1;j=L+1-i;j+) /内层相邻记录的交换与比较 m+;/比较次数+ if(Rj.keyRj-1.key) R0.key=Rj.key; Rj.key=Rj-1.key; Rj-1.key=R0.key; exchange=TRUE;y+;/移动次数+ m-;/比较次数 if(exchange

9、) /输出语句 printf(tt第%d趟冒泡排序的结果为:ntt,i); for(k=1;k=L;k+) printf(%5d,Rk.key); getchar(); printf(n); printf(ntt比较次数是:tt); printf(%d,m); printf(ntt移动次数是:tt); printf(%d,y); printf(ntt排序最终结果是:ntt); for(i=1;i=L;i+) printf(%5d,Ri.key); 4.1.2 快速排序核心思想 首先检查数据列表中的数据数,如果小于两个,则直接退出程序。如果有超过两个以上的数据,就选择一个分割点将数据分成两个部分

10、,小于分割点的数据放在一组,其余的放在另一组,然后分别对两组数据排序。 通常分割点的数据是随机选取的。这样无论你的数据是否已被排列过,你所分割成的两个字列表的大小是差不多的。而只要两个子列表的大小差不多核心代码void Quicksort(int low,int high)/该程序为递归算法实现 int i=low,j=high,k; R0.key=Rlow.key; while(ij) while(ij&R0.key=Rj.key) /右侧扫描 j-; sum+; if(ij) Ri.key=Rj.key;/交换 i+;sun+; while(ij&Ri.keyR0.key)/左侧扫描 i+; sum+; if(ij)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 设计及方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号