Алгоритм сортировки вставок, модифицирующий вывод

У меня есть работающий простой алгоритм сортировки вставок, написанный на Python. Я пытаюсь сделать вывод и поместить его в новый список без изменения исходного списка ввода. Я застрял, пытаясь понять, как это сделать, и, возможно, я просто переосмыслил это, но я подумал, что увижу, сможет ли кто-нибудь помочь. Спасибо!

#!/usr/local/bin/python

import sys
import random

def RandomArray(n, max):
    A = []
    i = 1
    while i <= n:
        v = random.randint(1, max+1)
        if v not in A:
            A.append(v)
            i = i + 1
    return A

A = RandomArray(10,100)
print(A)

def InsertionSort(A):
    element = 1
    for element in range(0, (len(A))):
        w = A[element]
        j = element - 1
        while (j >= 0) & (A[j] > w):
            A[j+1] = A[j]
            j = j - 1
        A[j+1] = w
    return A

print(InsertionSort(A))

1 ответ

Решение

Вы изменяете список в своей функции сортировки, простое решение с существующим решением - это копирование списка до его изменения.

import copy

def InsertionSort(A):
    A = copy.deepcopy(A) # or A = A[:] might work as well in this case
    ...
    return A

Как дополнительный совет, используемые вами соглашения об именах не являются питонскими. Имена функций должны быть заключены в змею, а не в Паскаль (я сохранил то же самое только для согласованности).

Другие вопросы по тегам