Python Bubble排序之后,重新打印原始列表



我正在为作业作业编写Python 3 Bubble排序程序,我无法弄清楚如何在列表已经被重印的原始列表(又称未分类列表(之后。排序。

以下已经发布的问题几乎一路得到答案,但要为第二个打印原始列表提供解决方案:

python 3

中的气泡排序

类似但没有解决打印问题:泡泡排序作业

我希望我能得到一个完整的答案

import sys
def bubblesort(mylist):
    changes = passes = 0
    last = len(mylist)
    swapped = True
    # This original list (below) correctly prints as unsorted:
    print("Original List: ", ','.join(map(str, mylist)) )
    while swapped:
        swapped = False
        for j in range(1, last):
            if mylist[j - 1] > mylist[j]:
                mylist[j], mylist[j - 1] = mylist[j - 1], mylist[j]  # Swap
                changes += 1
                swapped = True
                last = j
        # Only prints and increases number of passes if there was a swap
        # Remove if statement for the correct number of passes
        if(swapped):
          passes += 1
          print('Pass', passes, ':' , ','.join(map(str, mylist)))
    # This original list (below) prints sorted:
    print("nOriginal List: ", ','.join(map(str, mylist)) )
    print("Sorted List: ", ','.join(map(str, mylist)) )
    print("Number of passes =",passes)
    return mylist
print("Welcome to a Bubble Sort Algorithm in Python!")
mylist = " "
while True:
    print("nBubble sort in Python 3 Program")
    mylist = input("Enter a the value or type Exit to exit: ")
    if (mylist == "exit" or mylist == "Exit" or mylist == "EXIT"):
        print("Goodbye")
        sys.exit()
    else:
        mylist = [int(v) for v in mylist.split(',')]
        bubblesort(mylist)

该程序应产生以下印刷结果:

原始列表:4、9、74、0、9、8、28、1

通过1:4、9、0、9、8、8、28、1、74

pass 2:4、0、9、8、9、1、28、74

通过3:0、4、8、9、1、9、28、74

通过4:0、4、8、1、9、9、9、28、74

通过5:0、4、1、8、9、9、9、28、74

通过6:0、1、4、8、9、9、9、28、74

原始列表:4、9、74、0、9、8、28、1

排序列表:0、1、4、8、9、9、28、74

通过数:6

实际打印结果:

原始列表:4、9、74、0、9、8、28、1

通过1:4、9、0、9、8、8、28、1、74

pass 2:4、0、9、8、9、1、28、74

通过3:0、4、8、9、1、9、28、74

通过4:0、4、8、1、9、9、9、28、74

通过5:0、4、1、8、9、9、9、28、74

通过6:0、1、4、8、9、9、9、28、74

原始列表:0、1、4、8、9、9、28、74

排序列表:0、1、4、8、9、9、28、74

原始列表出现

您可以在数字列表上执行排序算法后创建原始列表的深层副本,作为打印引用。下面代码作品。

import sys
from copy import deepcopy
def bubblesort(mylist):
    changes = passes = 0
    last = len(mylist)
    swapped = True
    originalList = deepcopy(mylist)
    # This original list (below) correctly prints as unsorted:
    print("Original List: ", ','.join(map(str, mylist)) )
    while swapped:
        swapped = False
        for j in range(1, last):
            if mylist[j - 1] > mylist[j]:
                mylist[j], mylist[j - 1] = mylist[j - 1], mylist[j]  # Swap
                changes += 1
                swapped = True
                last = j
        # Only prints and increases number of passes if there was a swap
        # Remove if statement for the correct number of passes
        if(swapped):
          passes += 1
          print('Pass', passes, ':' , ','.join(map(str, mylist)))
    # This original list (below) prints sorted:
    print("nOriginal List: ", ','.join(map(str, originalList)) )
    print("Sorted List: ", ','.join(map(str, mylist)) )
    print("Number of passes =",passes)
    return mylist

我会列出一个具有相同内容的附加列表,然后对此进行排序。请注意,如果您只制作一个新名称,它将指向原始列表,并将修改:

new_list = original_list

会给您带来问题。

new_list = original_list[:]

将起作用。

最新更新