假设我们有一个填充了long long unsigned int的数组。每个相邻元件之间的距离很小。例如我们有:[0,1,0,1,0,1] 我们有另一个相同大小的数组,每个相邻元素之间的距离现在很重要。 然后我们有以下数组:[1,1000000000,1,1000000000,1,1000000000]。
最后一步是使用插入排序或合并排序或快速排序对两个数组进行排序。 由于元素之间的距离较大,第二个阵列的处理时间是否可能更长?
提前谢谢!
答案 0 :(得分:5)
排序算法(如插入排序,快速排序和合并排序)称为比较排序,因为它们纯粹基于这些元素的相对顺序对元素进行排序,而不是它们的绝对大小。从快速排序,合并排序或插入排序的角度来看,数组[0,1,0,1,0]和[0,100000,0,100000,0]完全相同,因为他们无法知道100000比#34;大得多。 1.对这些数组进行排序所执行的操作总数将完全相同。事实上,如果你用这些算法对每个数组进行排序并观察元素的移动,你就会发现完全相同的动作会被执行。
如果您正在谈论排序适合单个机器字的整数,那么移动的成本与存储在该机器字中的数值无关。比较这些元素的成本可能也相同。因此,我预测您会看到使用这些算法对这些数组进行排序所需的时间完全没有区别。
如果存在任何差异,则意味着您使用的处理器可以在不同的时间内比较或移动不同大小的数字。据我所知,没有真正的处理器架构可以做到这一点。
现在,另一方面,排序算法,如计算排序或基数排序,这不是比较排序和做取决于您正在处理的数字的大小, 需要更长时间才能对这些数组进行排序,因为它们一次可以处理一个数字,也可以分配到一个数组中,该数组的大小取决于问题中数字的大小。在这些情况下,只要您使用的算法实现得很好,应该看到运行时之间的差异。