插入排序中的比较和交换之间的差异

时间:2017-07-25 08:58:00

标签: algorithm sorting

下面给出了在阵列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)的实际插入排序算法的情况下找到最佳差异。

2 个答案:

答案 0 :(得分:1)

对于i2之内的length(A) compareswap次呼叫的数量将超过1次呼叫的数量,而不是i次呼叫的数量。从j0的所有元素中的当前元素是最小的(在这种情况下,当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条件下放置另一个计数器。 减去这两个将给出答案。