작은 테스트 케이스 (N = 20)에 대해 올바른 논리 출력을 확인했기 때문에 혼란스러워졌습니다. 나는 N = 10,000의 숫자를 시도하고 프로그램이 멈 춥니 다. 이유를 이해하지 못합니다 ... 가능한 한 간단하게 알고리즘을 구현했습니다.Python의 QuickSort - 입력 크기가 더 커지면 프로그램이 멈 춥니 다.
또한 N = 10k 목록에서 sorted(data)
을 호출하면 거의 즉시 작동하는 것으로 보입니다. 그래서 나는 알고리즘이 어딘가에 갇혀 있다고 확신합니다. 그래서 나는 꽤 왜 이런 일이 수에로 잃었어요
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
: 여기
는 코드입니다. 어떤 도움을 주셔서 감사합니다.
코드가 10k 데이터를 정렬하는 데 걸린 시간은 얼마나됩니까? 나는 매우 간단한 qsort와'sys.setrecursionlimit (2 ** 30)'을 구현했다. 30k 데이터 인 [2, 3, 5] * 10000을 정렬하는데 약 20 ~ 30 초가 걸린다. – xiaowl