Bastante confundido acerca de esto porque he verificado la salida lógica correcta para testcases lo suficientemente pequeños (N = 20). Intento hacer N = 10,000 números y el programa simplemente se cuelga y no entiendo por qué ... Implementé el algoritmo de la manera más simple posible.QuickSort en Python: ¿el programa se bloquea para tamaños de entrada más grandes?
Además, llamar al sorted(data)
en mi N = lista de 10k parece funcionar casi al instante. Así que estoy convencido de que mi algoritmo simplemente se queda atascado en alguna parte.
Aquí está el código:
def QuickSort(array):
qsort(array, 0, len(array))
def qsort(arr, left, right):
if ((right - left) < 2):
return
pivotIndex = choosePivot0(arr, left, right)
newPivotIndex = partition(arr, pivotIndex, left, right)
qsort(arr, 0, newPivotIndex)
qsort(arr, newPivotIndex + 1, right)
def partition(arr, pivotIndex, left, right):
swap(arr, pivotIndex, left)
pivot = arr[left]
i = left + 1
for j in range(left+1, right):
if (arr[j] < pivot):
swap(arr, i, j)
i = i + 1
swap(arr, left, i-1) #put pivot back where it belongs
#cobj.count = cobj.count + (right - left - 1) #add m-1 the #of comparisons
return (i-1) #give back where the pivot resides
def swap(array, i, j):
temp = array[i]
array[i] = array[j]
array[j] = temp
def choosePivot0(array, left, right):
return randint(left, right-1) #random
así que estoy bastante perdido en cuanto a por qué esto podría estar sucediendo. Gracias por cualquier ayuda.
¿Cuánto tiempo tardó su código para ordenar datos de 10k? Implementé un qsort mucho más simple, y 'sys.setrecursionlimit (2 ** 30)', se necesitan entre 20 ~ 30 segundos para ordenar '[2, 3, 5] * 10000', un dato de 30k. – xiaowl