题目:编写“简单选择排序”和“堆排序”算法,对它们在排序过程中的关键字比较次数和关键字移动次数进行比较。
测试数据:
(1)随机产生100个测试数据;
(2)写出测试结果。
插入元素,向上调整堆:
删除元素后,向下调整堆:
4.调试分析
本程序一共实现了5种排序方法,可以选择执行。
各种排序算法中关键字的比较次数和交换次数是和要排序的数据的个数有关系的,如果在每一次的交换和比较之后计数统计(当然我试过了),虽然有准确的数字,但是不足以进行总体的分析。进行大量的数据排序的时候,我们考虑的是整体的性能,而非准确的比较了多少次,交换了多少次,所以我进行了画出了排序算法的流程图,这对于分析关键字的比较次数和交换次数,更加直观,也能从整体上分析。
本程序中的数据,在经过一次排序后,已经是有序的了,这时候如果接着进行下一个排序,很可能导致算法的性能不能很好地发挥出来。所以,建议执行一次排序后,重新启动程序,这样会再次生成随机的数据,进行排序。
5.使用说明
运行程序,按照提示即可。
6.测试结果
1、随机生成10000个数据时,各个算法的执行时间为:
直接插入排序,耗时141
堆排序,耗时0
冒泡排序,耗时500
直接选择排序,耗时219
快速排序,耗时0
2、随机生成100000个数据时,各个算法的执行时间为:
直接插入排序,耗时15109
堆排序,耗时47
冒泡排序,耗时50000
直接选择排序,耗时23297
快速排序,耗时16
可以看出,快速排序果然快,堆排序也不逊色,冒泡、直接插入、直接选择随着数据数量的增加,他们的耗时也是快速增长的。
7.附录
源程序文件清单。