实验 5_2:内部排序算法比较
院系:工程管理学院自动化 学号:151271009 姓名:李步印
一、实验要求:
(1)对以下六种常用的内部排序算法进行比较:直接插入排序、希尔排序、起泡排
序、快速排序、简单选择排序、堆排序。
(2)待排序表的表长不小于 100,;其中的数据要用伪随机数产生程序产生;至少要用
5 组不同的输入数据进行比较;比较的指标为有关键字参加的比较次数和关键字的移动次
数(关键字交换为 3 次移动)。
(3)最后要对结果作简要分析,包括对各组数据得出结果波动大小的解释。
二、测试程序:
1、主函数执行:
int main(void){
do{
if(choice == 1) random(s); //随机数数组生成函数
else 打印数组 s;//因为 s 为上一组已排好序的正序或逆序数据
InsertSort(s, compare, shift, positive_s, reverse_s); //直接插入排序
ShellInsert(s, 5, compare, shift); //希尔排序
BubbleSort(s, compare, shift); //起泡排序
QuickSort(s, compare, shift); //快速排序
SelectSort(s, compare, shift); //简单选择排序
HeapSort(s, compare, shift); //堆排序
//打印各种排序方法的比较次数和移动次数
printf("%25s%15s%15s%15s%15s%15s", "直接插入排序", "希尔排序", "起泡排序
", "快速排序", "简单选择排序", "堆排序");
printf("%10s%15d%15d%15d%15d%15d%15d", "比较次数", compare[0], compare[1],
compare[2], compare[3], compare[4], compare[5]);
printf("%10s%15d%15d%15d%15d%15d%15d", "移动次数", shift[0], shift[1],
shift[2], shift[3], shift[4], shift[5]);
printf("0:结束\n1:继续测试下一组随机数据\n2:测试上一组数据正序\n3:测
试上一组数据倒序Enter choice:");
scanf("%d", &choice);
//选择下一组数据是利用随机数数组生成还是利用已经排好的正序或逆序数据;
if(choice == 2)
for(int k = 0; k < SIZE; k++)
s[k] = positive_s[k+1];
if(choice == 3)
for(int k = 0; k < SIZE; k++)
s[k] = reverse_s[k+1];
}while(choice != 0);
}