以下排序算法有效/无效的是哪种数据输入?快速排序,合并排序,堆排序,插入排序等。
我知道至少有两个因素会影响排序算法的性能:1)输入的大小,以及2)是否已对数据进行大部分排序。但是我不知道这些因素如何影响算法的效率。
我想详细研究一下,因此,如果您有任何可指向我的资源/链接,那就太好了。
答案 0 :(得分:0)
假设快速排序基于Hoare分区方案(以中间值作为枢轴),则对于几乎排序的数据,它不会降级为O(n ^ 2)的最坏情况时间复杂度。
https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme
合并排序始终执行n个log2(n)移动。如果数据已经排序,则比较次数约为(⌈n⌈log2(n)⌉)/ 2。
堆排序时间复杂度保持不变(重复操作可能会减少运行时间)。
插入排序是该列表中唯一可以对数据进行几乎排序的速度更快的排序,但是它的时间复杂度为O(n ^ 2)。我认为对于几乎排序的数据,时间复杂度应为〜O(m n),其中m是不适当元素的数量。
自然合并排序的变体在扫描和识别已排序的运行时可能在小规模运行上使用插入排序,而对已排序的数据的时间复杂度为O(n)。