2015-09-23 117 views
0

我有一個工作簡單的插入排序算法用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

你被明確變異輸入數組 - 如果你不希望影響到原有的,必須通過副本('插入排序(A [:])')或重構功能相應。請注意,突變其輸入的函數應按照慣例返回「無」。 – jonrsharpe

回答

1

您在排序函數中對列表進行變異,現有解決方案的簡單解決方案將在對變量進行變換之前對列表進行深度複製。

import copy 

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

作爲一個額外的建議,你使用的命名約定不是pythonic。函數名應該是蛇形的,而不是Pascal的(我爲了一致性而保持相同)。

+0

感謝您的幫助!我沒有意識到這會很容易,並且已經有一個複製模塊 – superfluousAM

+0

@superfluous不用客氣 – hspandher