如果我给插入排序一个反向排序的数字列表,这就是我遵循它的过程:
[6,5,4,3,2,1]
[5,6,4,3,3,2] - 1 compare + 1 swap
[4,5,6,3,2,1] - 2 compares + 2 swaps
[3,4,5,6,2,1] - 3 compares + 3 swaps
[2,3,4,5,6,1] - 4 compares + 4 swaps
[1,2,3,4,5,6] - 5 compares + 5 swaps.
总共你做了15次比较和15次交换或者30次或两次,如果N是6,那么这个算法最坏情况n ^ 2除非我看错了吗?
答案 0 :(得分:1)
你称之为交换的实际上并不是交换。交换涉及交换两个元素并使列表的其余部分保持不变。它可以在O(1)
时间内完成。
你有一个删除后跟一个插入。此操作的复杂性为O(n)
,因为它会移动列表的一部分。执行这些操作的n
是O(n^2)
。
(你对比较的定义也不完全清楚,但我现在就把它留下来。)
答案 1 :(得分:1)
O(N 2 )并不意味着结果将大于N 2 ,只是它将与N 2 <成比例增长< / SUP>
这里允许任何常数因素。例如,时间可以是
的形式T = c * N 2 + d
其中c和d是与N无关的常量。常量d
是&#34;设置时间&#34;的代理,而c
是每项操作的代理。其他&#34;介于&#34;之间形式也是可能的 - 你可以有线性或任何其他子方形组件,只要它们都不是“#34”支配&#34; N 2 。
N 2 计时背后的想法是,当您将输入的大小加倍时,时间大约增加四倍。较大的d
值会掩盖这种影响,但随着N的增长,差异会减小。
答案 2 :(得分:0)
O(n^2)
是您的比较的复杂性,并不意味着您(n^2)
比较其复杂性等式的最大程度。在最坏的情况下,您将获得等于(n*(n-1))/2
的1 + 2 + ... + n-1比较,因此其1/2(n^2) - n/2
。
答案 3 :(得分:0)
O(n ^ 2)只是最大可能'移动'的上限,移动是比较和/或交换的混合。与任何其他类型一样,O(n ^ 2)用于“普通香草插入排序”。可以有插入排序的变体,它可以使它说O(n.log n),但这些是变体,而不是插入排序,正如我们所知道/教它。