v1.0 可编辑可修改 排序综合
1.需求分析
任务描述
至少采用3种方法实现上述问题求解,并把排序后的结果保存在不同的文件中。
功能分析
显示随机数,是调用rand()函数输出数组a[]。数组a[]中保存有随机产生的随机数;直接选择排序,是通过n-1次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换之;起泡排序,是如果有n个数,则要进行n-1趟比较,在 将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个排序中的记录“基本有序”时,在对全体记录进行一次直接插入排序;直接插入排序,是将一个记录插入到以排序好的有序表中,从而得到一个新的记录数增1的有序表。设整个排序有n个数,则 进行n-1趟排序,即:先将序列中的第一个记录看成一个有序的子序列,然后第2个记录起逐个进行插入,直接整个序列变成按关键字非递减有序列为止;快速排序,是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列;堆排序,主要由建立初始堆和反复重建堆这两部分的时间开销构成,它们均是通过调用Heapify实现的。
2.概要设计
主要全程变量和数据结构
(1) 数据结构:
#include \ #include <> #define s 100
typedef struct record {int key;};
1
v1.0 可编辑可修改 static struct record a1[s],a2[s],a3[s],a4[s],a5[s],a6[s],rec; int a[7],b[7];file()
(2) 算法的入口及其说明 #include<>
#define s 100 直接插入排序 *** \\n\
printf(\希尔排序 *** \\n\ printf(\起泡排序 *** \\n\ printf(\快速排序 *** \\n\ printf(\简单选择排序 *** \\n\ printf(\堆排序 *** \\n\ printf(\总结 *** \\n\ printf(\退出 *** \\n\
printf(\ 以上printf(\为系统主菜单输出
程序模块结构
程序划分为以下几个模块(即实现程序功能所需的函数)
主控菜单项选择函数:menu_select()
插入排序函数:InsertSort() 选择排序函数:StlectSort() 起泡排序函数:BubbleSort() 堆排序函数:heapsort() 快速排序函数:Quicksort() 希尔排序:Shell Sort()
2
v1.0 可编辑可修改 3.详细设计
程序的主要结构如下图所示。
图3-1函数调用关系图
其中main()是主函数,它进行菜单驱动,根据选择项1~0调用相应的函数
数据结构定义
图3-2课程设计流程图
3
v1.0 可编辑可修改 显示各排序算法排序后的的数据。
图3-3程序工作流程图
函数实现(例如直接插入排序)
#include \
#include <> #define s 100
typedef struct record {int key;};
static struct record a1[s],a2[s],a3[s],a4[s],a5[s],a6[s],rec; int a[7],b[7]; file() {
printf(\ printf(\直接插入排序 *** \\n\ printf(\退出 *** \\n\
printf(\ void Straight_insert_sort(r,n) /*直接插入*/ struct record r[]; int n; { int i,j; a[1]=0;b[1]=0;
4
v1.0 可编辑可修改 for(i=1;i<=n;i++) printf(\ printf(\ for(i=2;i<=n;i++) { r[0]=r[i]; j=i-1;
while((j>=0) && (r[0].key printf(\直接插入******************\\n\ for(i=1;i<=n;i++) printf(\ printf(\ printf(\ printf(\ } 4.调试分析 直接插入排序 将一个记录插入到已排好的有序表中,从而得到一个新的,记录数增加1的有序表 起泡排序 首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字。依此类推,知道第N-1个和第N个记录的关键字进行过比较为止。上述为第一趟排序。其结果使得关键字的最大被安排到最后一个记录的位置上。然后进行第二趟起泡排序,对前N-1个记录进行同样操作。一共要进行N-1趟起泡排序。 直接选择排序 每一趟从待排序的记录中选出关键字最小的,顺序放在以排好序的子文件的最后, 5