Es folgt eine schnelle Umsetzung von MergeSort ich in Python eckt:MergeSort - Strange Verhalten bei numpy Verwendung zu generieren Testsequenz
import numpy
def mergeSort(a):
if len(a) ==1:
return
if len(a) == 2:
if a[0] > a[1]:
tmp = a[0]
a[0] = a[1]
a[1] = tmp
return
x = a[0:len(a)/2]
y = a[len(a)/2:]
mergeSort(x)
mergeSort(y)
j=0
k=0
for i in xrange(len(a)):
if j == len(x) or k<len(y) and x[j] > y[k]:
a[i] = y[k]
k = k + 1
else:
a[i] = x[j]
j = j + 1
a = numpy.random.randint(100, size=3) # Generates say [20 3 75]
mergeSort(a)
print a # Yields [3, 3, 75] !
a = [20,3,75]
mergeSort(a)
print a # Yields [3, 20, 75] !
Diese Implementierung aus unerklärlichen Gründen versagt, wenn ich numpy verwenden für mich zufällig Arrays zu erzeugen, während bei Ich hardcodiere genau eine der fehlerhaften numpy generierten Sequenzen und führe den Code aus, er sortiert sich perfekt. Gibt es etwas, das ich vermisse?
NumPy Arrays keine Listen sind und verhalten sich nicht wie Listen. Wenn Sie beispielsweise ein NumPy-Array schneiden, erhalten Sie eine Ansicht der Originaldaten, keine Kopie. – user2357112
Haben Sie versucht, strategisch platzierte Druckfunktionen zu verwenden, um zu sehen, was passiert? – wwii
Das erklärt es, denke ich. Auch wenn du den schnellsten Weg postest, um eine Liste von numpy zu bekommen, kann ich das als Antwort markieren. Ja, ich habe versucht zu drucken, aber konnte nicht feststellen, dass mutieren Scheiben des Arrays mutierte die ursprüngliche – Erric