Я создал быструю сортировку с тестовым примером для того же массива с 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.")
Python – получение ошибки рекурсии быстрой сортировки ⇐ Python
Программы на Python
-
Anonymous
1774586017
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[i] < firstitem:
j+=1
array[j], array[i] = array[i], 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.")
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия