在最坏的情况下,你如何操作插入排序总是运行

How do you manipulate Insertion Sort to always run in the worst case complexity

我必须实现一个散列函数,该函数将数组和索引作为参数和 returns 一个整数。然后我必须使用这个散列函数使插入排序在最坏的情况下总是 运行 即使结果数组最终没有得到排序也是如此。

伪代码如下:

function INSERTIONSORT(A[0..n − 1])
for i ← 1 to n − 1 do
     j ← i − 1
     while j ≥ 0 and HASH(A, j + 1) < HASH(A, j) do
          SWAP(A[j + 1], A[j])
          j ← j − 1

我知道插入排序的最坏情况复杂度是 O(n2),但是如果我让 HASH(A, j + 1) return 是一个整数总是小于 HASH(A, j) 以便 while 循环 运行s 的最大循环次数,是否会达到 O(n2) 时间复杂度?

我认为最后一个问题“会达到 O(n2) 时间复杂度吗?”本身就是错误的。
明明达到了O(n2)的时间复杂度,怎么就不行呢?

如果你想在最坏的情况下总是工作,除了 O(n2) 你基本上还想确保o(n2),即您要固定等于上限的下限。

无论如何,答案仍然是肯定的:让 HASH(A, j + 1) 返回一个总是小于 HASH(A, j) 的整数,你确保内循环总是运行 i 次。因此,对于任何执行,您都将执行 exactly 1+...+(n-1),这是二次(下限和上限)有界的。