我最近一直在学习课堂上的基本排序(冒泡排序,插入排序和选择排序),并且对运行时间有点困惑。
在老师给我们的作业上,一个问题是: “对于所有密钥相同的文件,3种基本排序中哪一种运行速度最快?对于具有相反顺序数据的文件怎么样?”
对于问题的第一部分,我并不完全确定“钥匙”是什么意思。那么,这是否意味着存在一个包含多个数据的大小为1的数组?我不认为“密钥”与“数据”相同。我知道如果订购了所有数据,那么插入排序将是最快的,但我不确定这是否会对问题产生任何影响。
对于问题的第二部分,我认为它将是选择排序,因为无论数据中的反转次数如何,都需要进行恒定的比较。插入排序和冒泡排序会导致交换太多。
我对问题的第一部分感到困惑。
答案 0 :(得分:2)
通常根据我的经验,在对文件进行排序时,可以说该文件包含"记录"并且您正在移动每条记录,以使其显示在它应该在之前的所有记录之前。 "键"是您正在使用的记录的任何部分,以确定一条记录是在另一条记录之前还是之后。如果您只是对数字或字符串进行排序,那么"键"是整个记录。在其他情况下,每条记录可能是某人的学校成绩单,并且出于某种原因,您希望按学生的姓名对这些记录进行排序,因此记录中的大多数数据都不是密钥的一部分。如果您的老师说过他或她认为是交换期间移动的数据单位,那将会很有帮助。
我认为您正在考虑记录已经排序的情况,并且所有密钥都是相同的情况。
对于记录完全相反的情况,问题不在于选择排序中的比较数量受数据初始顺序的影响程度。相反,问题(关于比较)是任何算法是否能够执行少于其他算法。通常我们说插入排序比选择更少的比较,但在这种情况下,您可能能够以其他方式显示。当然,您还需要查看实际需要多少比较冒泡排序。
答案 1 :(得分:1)
您的老师问题是:
对于所有密钥相同的文件,3种基本排序中哪一种运行速度最快?
换句话说,问题是:
3种基本类型中哪一项具有最佳案例的最小时间复杂度?
时间复杂度:渐近数学符号,表示与输入大小相关的运行时间增长率。 p>
最佳案例:列表已经排序,包括相同条目的情况。
3种基本排序是什么?
插入排序与O(n)
。
选择排序 O(n^2)
。
Bucket Sort 与O(n+k)
。
因此,最佳案例的最佳基本排序算法是插入排序与O(n)
。