气泡排序未打印正确的内容

问题描述 投票:0回答:3

此简单的冒泡排序有效。但是,说A = 45且B = 23,我怎样才能打印B,A而不是24、45。提前致谢。

a = input('Pick a number')
b = input('Pick a number')
c = input('Pick a number')
d = input('Pick a number')
e = input('Pick a number')

my_list = [a,b,c,d,e]

def bubble(bad_list):
    length = len(bad_list) - 1
    sorted = False

    while not sorted:
        sorted = True
        for i in range(length):
            if bad_list[i] > bad_list[i+1]:
                sorted = False
                bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]

bubble(my_list)
print (my_list)
python bubble-sort
3个回答
2
投票

提供的数字是不同的,您可以首先获取列表的副本,然后在列表中查找原始位置并将其转换为相应的字母:

initial_list = my_list.copy()
bubble(my_list)
print(my_list)
print ([["a", "b", "c", "d", "e"][initial_list.index(i)] for i in my_list])

1
投票

您可以使用列表理解将变量转换为numbers

my_list = [int(input('Pick a number')) for _ in range(5)]

0
投票

这是我的处理方式:不只是在列表中存储数字,而是存储一个既包含数字又包含该项目的“名称”(即表示其在原始列表中位置的字母)的对。

from collections import namedtuple
Item = namedtuple('Item', 'number letter')

my_list = []
for letter in 'abcde':
    number = int(input('Pick a number: '))
    my_list.append(Item(number, letter))

# ... bubble sort code works the same

bubble(my_list)

print([ item.letter for item in my_list ])

示例:

Pick a number: 5
Pick a number: 1
Pick a number: 3
Pick a number: 4
Pick a number: 2
['b', 'e', 'c', 'd', 'a']

之所以可以不更改bubble函数的原因是因为这些项将由number比较,因为这是元组的第一个组成部分。如果两个项目的编号相等,它们将通过letter进行比较,并且不会互换,因为第一个字母始终小于第二个字母;正确,因为冒泡排序不应交换相等的数字。

© www.soinside.com 2019 - 2024. All rights reserved.