【发布时间】:2021-04-29 08:11:56
【问题描述】:
我需要很大的帮助,我似乎无法弄清楚如何执行此代码。因此,我使用选择排序按升序对未排序的数字列表进行排序,然后返回对列表进行排序所需的交换次数。
下面是我的代码:
def swaps(numbers):
count = 0
for i in range(len(numbers)):
minIndex = i
for j in range(i + 1, len(numbers)):
if numbers[j] < numbers[minIndex]:
minIndex = j
if i != minIndex:
numbers[i], numbers[minIndex] = numbers[minIndex], numbers[i]
count += 1
return count
对于这两个测试用例:
numbers = [0, 4, 2, 7, 5]
print(swaps(numbers))
numbers = [9, 8, 7, 6, 5, 4]
print(swaps(numbers))
它工作得很好,但对于这个测试用例它不起作用:
import random
random.seed(30)
numbers = [random.randint(1, 50) for index in range(10)]
print(numbers)
print(swaps(numbers))
这个测试用例的号码列表是[35, 19, 40, 2, 40, 42, 14, 17, 4, 26]。现在解决它交换了 7 次,但在我的测试程序中它假设交换了 8 次。这是因为40的重复吗?
如何配置我的代码,以便它考虑到相同数字的重复?
【问题讨论】:
-
"现在计算它交换了 7 次,但在我的测试程序中它假设交换了 8 次。"你的意思是你期望 7,但是你的代码打印
8?因为如果是这样,当我运行它时,我得到了7,正如预期的那样。 -
如果情况正好相反并且您期望 8 次交换(我无法从您的措辞中完全看出),那么我同意 Blckkght 的 answer。无需使用该输入交换 8 次。