文档详情

数据结构课程设计综合排序分析.docx

发布:2016-11-21约4.06千字共17页下载文档
文本预览下载声明
PAGE 17 PAGE  滨江学院 数据结构 课程设计 题 目 综合排序 院 系 计算机系 年级班级 13计科2 学生姓名 李柯江 学 号 20132308049 学 期 2014-2015(二) 任课教师 黄 群 二O一五年 五月 二十 日 1需求分析 1.1 任务与分析 任务: 利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 要求: 至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。 统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。 分析: 本系统实现了几种常用的排序方法,包括:插入排序、起泡排序、快速排序(递归、非递归)、堆排序。 1.2 功能模块的划分 1.2.1 输入模块 利用随机函数产生N个随机整数(20000以上),个数由用户自己输入。 1.2.2输出模块 输出排序前或排序后的数据元素到屏幕显示,并且输出按照选择的算法排序后的数据元素到文件中保存。 1.2.3输出结论 比较不同排序时间长短,输出两种最快的排序方法。 1.2.4排序模块 插入排序 思路:设有一组关键字{K1,K2,…….,Kn},排序开始变认为K1是一个有序的序列,让K2插入到表长为1的有序序列,使之成为一个表长为2的有序序列, 让K3插入到表长为2的有序序列,使之成为一个表长为3的有序序列,依次类推,最后让Kn插入上述表长为n-1的有序序列,得到一个表长为n的有序序列. 冒泡排序 如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较 简单选择排序 通过n-I次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换之 2概要设计 2.1程序结构框图 综合排序系统 寻找最快排序 简单选择排序 气泡排序 插入排序 开始 产生随机函数 2.2程序流程图开始 选择选取数 产生随机函数 插入排序 起泡排序 寻找最快排序 退出 简单选择排序 输出 2.3头文件 #includestdio.h #includestdlib.h #includecstdlib #includetime.h 2.5各种操作函数: (1)创建一个数组函数: (2)输出数组函数: ( 3 ) 简单选择排序 (4)插入排序函数: (5)起泡排序函数: (6)时间函数:start = clock();end = clock(); 2.6主函数 Void main() { 接受命令(选择要执行的操作); 处理命令; 输出结果; } 3 详细设计 #includestdio.h #includestdlib.h #includetime.h #define N 30001 void main() { int i,j,n,k; int n1,t; int a[N],b[N],c[3],d[3]; clock_t start,finish; int time1,time2,time3; 输入设计 printf(*************************数据结构排序综合**************************\n); printf(\n输入要产生的随机数个数:); scanf(%d,n); srand((unsigned)time(NULL)); for(i=0;in;i++) a[i]=rand(); //插入排序 for(i=0;in;i++) b[i]=a[i]; printf(\n); printf(\t插入排序\n); printf(\n); start=clock(); for(i=1;in;i++) //依次插入数字到它前面已经排好序的数字中去 { t=b[i]; j=i-1; while(b[j]t j=0) { b[j+1]=b[j]; j--; } if(j!=(i-1)) //第i个数字比前面的都大,不需要重新插入 { b[j+1]=t; } } for(i=n
显示全部
相似文档