微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用选择排序

如何解决使用选择排序

我需要很大的帮助,我似乎无法弄清楚如何执行此代码。因此,我使用选择排序按升序对未排序的数字列表进行排序,然后返回对列表进行排序所需的交换次数

下面是我的代码

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,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,42,14,17,26]。现在解决了它交换了 7 次但在我的测试程序中它假设已经交换了 8 次。这是因为重复 40 吗?

如何配置我的代码,使其考虑到相同数字的重复?

解决方法

如果您应该在有一对重复值时计算额外的交换,那么满足该期望的一种简单方法是将 numbers[j] < numbers[minIndex] 检查更改为使用 <= 而不是 {{ 1}}。

虽然这让代码变得更糟,所以我一定要仔细检查这种期望是否真的存在。设法以更少的交换进行排序应该是一个功能,而不是一个错误!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。