插入排序算法修改输出

Insertion sort algorithm modifying output

我有一个用 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))

您正在改变排序函数中的列表,现有解决方案的一个简单解决方案是在改变列表之前深度复制列表。

import copy

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

额外的建议是,您使用的命名约定不是 pythonic。函数名应该使用蛇形而不是 Pascal 大小写(我保持相同只是为了保持一致)。