void main() {
初始化; 随机数的产生; 调用子函数
};
(2)子函数模块:实现直接插入排序的抽象数据类型。 实现希尔排序的抽象数据类型。 实现冒泡排序的抽象数据类型。 实现快速排序的抽象数据类型。 实现选择排序的抽象数据类型。 实现堆排序的抽象数据类型。
最后输出相应算法的比较次数(至少有五种不同的数据)和移动次数(关键字的交换记为三次移动)。从而直观的判断各内部排序算法性能的优劣性。
4 详细设计
4.1数据类型的定义
(1)直接插入排序类型:
void Insertsort();
(2)希尔排序类型:
void Shellsort();
(3)冒泡排序类型:
void Bubblesort();
(4)快速排序类型:
void QuickSort(int low,int high);
(5)选择排序类型:
void Selectsort();
(6)堆排序类型:
void Heap();
4.2主要模块的算法描述
3
下面是主程序的结构图和几个主要模块的流程图:
开始 循环
产生一组随机数
插入排序 希尔 排序 将随机数保存在数组中 起泡排序 快速排序 选择排序 堆排序 记录关键字的比较次数和移动次数 输出关键字的比较次数和移动次数
结束 4.21主程序结构图
4
开始
i=1,j=1 输入要排序的一组元素 定义临时中间变量k,并赋初值 N i<元素总个数 N Y j<元素总个数 i
第j个元素>第j+1个元素 Y
结束 输出比较次数和移动次数 利用k交换第j个元素和第j+1个元素 4.22冒泡排序关键字比较次数和移动次数的流程图
5
开始
定义临时中间变量h,并赋初值 输入要排序的一组元素 i=1,j=1 N i<元数总个数 Y
h记下目前找到的最小关键字所在的位置 i=i+1 在无序区R[i-n]中选h最小记录R[h] 做第i趟排序
输出比较次数和移动次数 交换R[i]和R[h] 结束 4.23选择排序关键字比较次数和移动次数的流程图
6
开始
定义临时中间变量k,并赋初值 输入要排序的一组元素
将二叉树转换成堆 i=总元素个数-1 N i<=1 Y
i--,k++ 将堆的根植和最后一个值交换
4.24堆排序关键字比较次数和移动次数的流程图
输出比较次数和移动次数 结束
7