Перепечатка оригинального списка после сортировки пузыря Python - PullRequest
1 голос
/ 30 апреля 2019

Я пишу программу Python 3 Bubble Sort для домашнего задания и не могу понять, как получить исходный список для повторной печати (он же не отсортированный список) после того, как список уже отсортирован.

Следующий уже опубликованный вопрос почти полностью отвечает на вопросы, но не дает решения для второго печатного оригинального списка:

Пузырьковая сортировка в Python 3

Аналогично, но не касается проблемы печати: Bubble Sort Домашнее задание

Я надеюсь в репосте, что смогу получить полный ответ

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, 28, 1, 74

Пропуск 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, 28, 74

Пропуск 5: 0, 4, 1, 8, 9, 9, 28, 74

Пропуск 6: 0, 1, 4, 8, 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, 28, 1, 74

Пропуск 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, 28, 74

Пропуск 5: 0, 4, 1, 8, 9, 9, 28, 74

Пропуск 6: 0, 1, 4, 8, 9, 9, 28, 74

Исходный список: 0, 1, 4, 8, 9, 9, 28, 74

Сортированный список: 0, 1, 4, 8, 9, 9, 28, 74

Оригинальный список выглядит отсортированным

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Вы можете создать полную копию своего оригинального списка в качестве справочного материала для печати после выполнения алгоритма сортировки в вашем списке номеров.Ниже код работает.

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
0 голосов
/ 30 апреля 2019

Я бы сделал дополнительный список с тем же содержимым и отсортировал бы ТОИмейте в виду, что если вы просто создадите новое имя, оно будет указывать на исходный список и изменит это так:

new_list = original_list

создаст вам проблемы.

new_list = original_list[:]

будет работать.

...