Python 3:插入排序比较计数器

时间:2016-05-17 05:33:45

标签: python algorithm python-3.x comparison insertion-sort

我需要为我的插入排序程序添加一个总计比较计数器,但我不知道为什么我总共得到0次比较!

我知道比较输出应该是15(对于我的特定数组)而不是0。

到目前为止,这是我的代码:

def insertionSort(values):
    k = 0
    n = len(values) - 1
    comparisons = 0
    while k+1 <= n:
        i = k
        while values[i] > values[i+1]:
            temp = values[i]
            values[i] = values[i+1]
            values[i+1] = temp
            comparisons += 1 #I think this is wrong
        k = k + 1
    return comparisons, values

我做错了什么?

2 个答案:

答案 0 :(得分:1)

希望这有效

def insertion(a,length):
    count=0
    for i in range(1,length):
        key=a[i]
        jj=i
        while(jj>0 and a[jj-1]>key):
            a[jj]=a[jj-1]
            jj=jj-1
            count += 1
        a[jj]=key
    print count

没有。 swape将等于使用while循环移动元素的元素数。因此,您可以在while循环中使用标志变量,以检查循环是否针对每个元素运行,并在每次标志变量显示交换时将计数器变量增加1。

答案 1 :(得分:0)

我刚检查了你的代码,而不是为了排序[7,5,4,6]。

这是修改后的版本 -

def insertionSort_mod(values):
    k = 0
    n = len(values) - 1
    comparisons = 0
    while k+1 <= n:
        i = k+1
        curr_val = values[i]
        comparisons += 1
        while i>0 and values[i-1] > curr_val:
            values[i] = values[i-1]
            i=i-1
            comparisons += 1
        values[i] = curr_val
        k = k + 1
    return comparisons, values

print insertionSort_mod( [1, 2, 3, 55, 5, 6, 8, 7, 9, 111])

输出:

(15, [1, 2, 3, 5, 6, 7, 8, 9, 55, 111])

在你的上下文中,k + 1应该是当前索引,因此我应该是k + 1并且应该与之前的值i-1进行比较