Я пытаюсь написать свой первый алгоритм быстрой сортировки в течение нескольких часов, но все равно не получаю это правильно. Цель состоит в том, чтобы написать быстрый код сортировки для сортировки массива. Я хочу использовать две функции: рекурсивную функцию quick_sort и функцию разделения.Быстрая сортировка не работает после первого раздела
Я обнаружил, что функция разбиения кажется корректной для каждой подматрицы, сгенерированной разделом и покорением, но возвращаемый полный массив, казалось, не изменился после первого раздела (первый раздел имеет эффект, а второй, третий разделы , ..., казалось, не имеет никакого эффекта).
Должно быть, я что-то пропустил, какие-то намеки?
def partition(a, first, last):
x = a[0]
j = 0
for i in range((first+1), (last+1)):
if x >= a[i]:
j = j + 1
a[i], a[j] = a[j], a[i]
a[0], a[j] = a[j], a[0]
return j
def quicksort(a):
quick_sort(a, 0, len(a) - 1)
def quick_sort(a, first, last):
if first < last:
j = partition(a, first, last)
# devide a into two parts and do quicksort respectively
quicksort(a[:j])
quicksort(a[j+1:])
return a
a = [6.5, 4, 2, 3, 9, 8, 9, 4, 7, 6, 1]
quicksort(a)
a [: j] - это другой массив, a копия. Вы должны использовать quicksort (a, first, j), quicksort (a, j + 1, last) – UmNyobe
Это именно то место, где я пропустил! Большое спасибо UmNyobe – enaJ