我需要为我的插入排序程序添加一个总计比较计数器,但我不知道为什么我总共得到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
我做错了什么?
答案 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进行比较