Я написал рекурсивную рандомизированную функцию быстрой сортировки, как показано ниже:
def randomized_quick_sort(a, l, r):
if l >= r:
return
k = random.randint(l, r)
a[l], a[k] = a[k], a[l]
m1, m2 = partition3(a, l, r)
randomized_quick_sort(a,l,m1-1)
randomized_quick_sort(a,m2+1,r)
Ниже приведена используемая функция разбиения, которая разбивает список на три части: меньше, чем точка, равна точке и больше, чем точка, где точка является первым элементом в списке ввода.
def partition3(a, l, r):
x = a[l]
less, equal, greater = [], [], []
for val in a[l:r+1]:
if val < x:
less.append(val)
if val == x:
equal.append(val)
if val > x:
greater.append(val)
a[l:r+1] = less + equal + greater
m1 = len(less)
m2 = m1 + len(equal) - 1
return m1, m2
если я запускаю эту функцию быстрой сортировки несколько раз на простом вводе, таком как
a = [2,2,3,3]
randomized_quick_sort(a,0,len(a)-1)
после всего лишь нескольких попыток я получаю ошибку «превышена максимальная глубина рекурсии». Пожалуйста, помогите!