内部排序算法比较
问题描述
在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶或大概执行时间。试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。
基本要求
- 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。
- 待排序表的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)
- 最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释测试数据。
测试数据
由随机数产生器生成。
实现提示
主要工作是设法在已知算法中的适当位置插入对关键字的比较次数和移动次数的计数操作。程序还可以考虑几组数据的典型性,如,正序、逆序和不同程度的乱序。注意采用分块调试的方法。
选作内容
- 增加折半插入排序、二路插入排序、归并排序、基数排序等。
- 对不同的输入表长作试验,观察检查两个指标相对于表长的变化关系。还可以对稳定性作验证。
思路
首先从输入中读取待排序表的表长 n
,待排序表的最大值 m
和测试次数 t
。然后进行 t
次测试,每次测试都会生成 n
个最大值为 m
的随机数,并将这些随机数存储在数组 a
中。接着,使用六种不同的排序算法(冒泡排序 bubbleSort
、直接插入排序 insertSort
、简单选择排序 selectSort
、快速排序 quickSort
、希尔排序 shellSort
和堆排序 heapSort
)对数组 a
进行排序,并通过 testAlgorithm
函数测试每种排序算法的性能。最后,暂停程序,等待用户操作后继续下一次测试。
仓库地址
https://github.com/HEX9CF/internal-sorting-algorithms-comparison