气泡排序未打印正确的东西

时间:2020-01-29 09:25:39

标签: python bubble-sort

这种简单的气泡排序有效。但是,说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)

4 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

答案 2 :(得分:1)

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

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进行比较,并且不会互换,因为第一个字母将始终小于第二个字母;这是正确的,因为冒泡排序不应交换相等的数字。

答案 3 :(得分:0)

如果值是唯一的,则可以制作一个包含变量名作为键,而变量值作为字典值的字典,如下所示:

my_dict = {'a' : a, 'b' : b, 'c' : c, 'd' : d, 'e' : e}

这应该在调用bubble()函数之前完成。完成排序后,只需执行

def get_key(val): 
    for key, value in my_dict.items():
        if val == int(value): 
            return key
for i in my_list:
    print(get_key(i), end = ', ')

这将输出

a, b, c, d, e,