下面给出了在阵列A上应用的插入排序算法的伪代码(从零开始的索引)。 def比较(a,b): 如果a> b返回1 否则返回-1
for i : 1 to length(A)
j = i - 1
while j > 0
if compare(A[j-1], A[j]) > 0
swap(A[j], A[j-1])
j = j - 1
else break
给定一个整数数组A,在A上应用时,通过上述算法找出比较函数调用次数和交换函数调用次数之间的差异。
让我们举个例子,A = {1,2,4,3}。如果我们在A上应用插入排序,我们按照以下顺序调用比较和交换函数的后续行为
compare (A[0], A[1])
compare (A[1], A[2])
compare (A[2], A[3])
swap (A[2], A[3])
compare (A[1], A[2])
这里比较函数调用4次,交换函数调用1次。答案是4-1 = 3。
我需要在没有运行O(n ^ 2)的实际插入排序算法的情况下找到最佳差异。
答案 0 :(得分:1)
对于i
到2
之内的length(A)
compare
,swap
次呼叫的数量将超过1
次呼叫的数量,而不是i
次呼叫的数量。从j
到0
的所有元素中的当前元素是最小的(在这种情况下,当length(A)-1 - minimal number occurrences
变为minElement = A[1] // one-based array
result = length(A) - 1
for i = 2 to length(A)
if A[i] < minElement
minElement = A[i]
result = result - 1
时,我们退出循环)。答案是editorstate
。
selectionstate
答案 1 :(得分:0)
在while
循环中放置一个计数器,在if
条件下放置另一个计数器。
减去这两个将给出答案。