气泡排序实现不工作

2024-05-20 04:08:30 发布

您现在位置:Python中文网/ 问答频道 /正文

这种冒泡排序算法每次运行时都会打印一个空列表,真的看不出有什么问题:

def bubble_sort(seq):
    changed = True

    while changed:
        changed = False
        for i in range(len(seq) - 1):
            if seq[i] > seq[i+1]:
                seq[i], seq[i+1] = seq[i+1], seq[i]
                changed = True
    print(seq)          
    return None         


if __name__ == '__main__':
    bubble_sort(list(range(0,10,-1)))

Tags: in算法falsetrue列表forlenif
1条回答
网友
1楼 · 发布于 2024-05-20 04:08:30

list(range(0, 10, -1))给出一个空列表[],因为您的范围是从0到10,步数为-1。。。你知道吗

试试list(range(10, 0, -1))

def bubble_sort(seq):
    changed = True
    while changed:
        changed = False
        for i in range(len(seq) - 1):
            if seq[i] > seq[i + 1]:
                seq[i], seq[i + 1] = seq[i + 1], seq[i]
                changed = True
    print(seq)
    return None


if __name__ == '__main__':
    # l = list(range(0, 10, -1)) # Wrong :-)
    l = list(range(10, 0, -1))
    print l
    bubble_sort(l)

结果

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

更新:如果你想做递归,但没有作弊:-)。。。你知道吗

def bubble_sort(input_list):
    for idx, num in enumerate(input_list):
        try:
            if input_list[idx + 1] < num:
                input_list[idx] = input_list[idx + 1]
                input_list[idx + 1] = num
                bubble_sort(input_list)
        except IndexError:
            pass
    return input_list


if __name__ == '__main__':
    my_list = [100, 39, 2, 12, 42, 12, 90]
    bubble_sort(my_list)
    print(my_list)

相关问题 更多 >