数据结构课程设计综合排序分析.docx
文本预览下载声明
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
显示全部