Python – получение ошибки рекурсии быстрой сортировкиPython

Программы на Python
Ответить
Anonymous
 Python – получение ошибки рекурсии быстрой сортировки

Сообщение Anonymous »

Я создал быструю сортировку с тестовым примером для того же массива с n=2,4,...2^16. Моя быстрая сортировка работает (проверено со стандартным массивом), и теперь я пытаюсь проверить до 2 ^ 16. Я получаю следующую ошибку:
9 512
Single iteration for time elapsed: 0.0088467 seconds.
10 1024
10 1024
Traceback (most recent call last):
File "quicksort1.py", line 37, in
quicksort1(array_to_sort, low, high)
File "quicksort1.py", line 12, in quicksort1
quicksort1(array, index + 1, high)
File "quicksort1.py", line 12, in quicksort1
quicksort1(array, index + 1, high)
File "quicksort1.py", line 12, in quicksort1
quicksort1(array, index + 1, high)
[Previous line repeated 993 more times]
File "quicksort1.py", line 10, in quicksort1
index = partition(array, low, high)
File "quicksort1.py", line 21, in partition
for i in range(low+1, high+1):
RecursionError: maximum recursion depth exceeded in comparison

Как видите, он запускается до 10-го раза, а затем вылетает. Я использовал import sys // sys.setrecursionlimit(20000), но он работал до 15-й итерации, а затем снова вылетал. Если бы предел был слишком высоким, я бы получил ошибку сегментации: 11. Кто-нибудь знает, как к этому подойти? Ему просто нужно работать рекурсивно без сбоев. Спасибо (код ниже):
#import sys
import random
import time
from random import randint

def quicksort1(array, low, high):

if high > low:
index = partition(array, low, high)
quicksort1(array, low, index - 1)
quicksort1(array, index + 1, high)

#sys.setrecursionlimit(20000)

def partition(array, low, high):

firstitem = array[low]
j = low

for i in range(low+1, high+1):
if array < firstitem:
j+=1
array[j], array = array, array[j]
index = j
array[low], array[index] = array[index], array[low]
return index

# testing our program
for k in range(1, 17):
unsorted_array = [random.randint(0, 2**k) for _ in range(2**k)]
time_start = time.clock()
for i in range(10):
array_to_sort = unsorted_array
print(k, len(array_to_sort))
low, mid, high = 0, len(array_to_sort)//2, len(array_to_sort)-1
quicksort1(array_to_sort, low, high)
time_elapsed = (time.clock() - time_start)
print("Single iteration for time elapsed: ", time_elapsed/10, "seconds.")

print("Time elapsed to run the program: ", time_elapsed, "seconds.")
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»