62. Массивы 63. Алгоритмы обработки массивов
Скачать 1.09 Mb.
|
Быстрая сортировкаРазделение:
Быстрая сортировка
L > R : разделение закончено! ! Быстрая сортировкаN = 7 A = [0]*N # заполнить массив qSort( A, 0, N-1 ) # сортировка # вывести результат Основная программа: Быстрая сортировкаdef qSort ( A, nStart, nEnd ): if nStart >= nEnd: return L = nStart; R = nEnd X = A[(L+R)//2] while L <= R: while A[L] < X: L += 1 while A[R] > X: R -= 1 if L <= R: A[L], A[R] = A[R], A[L] L += 1; R -= 1 qSort ( A, nStart, R ) qSort ( A, L, nEnd ) qSort ( A, nStart, R ) qSort ( A, L, nEnd ) рекурсивные вызовы while A[L] < X: L += 1 while A[R] > X: R -= 1 разделение на 2 части массив начало конец Быстрая сортировкаСлучайный выбор элемента-разделителя: from random import randint def qSort ( A, nStart, nEnd ): ... X = A[randint(L,R)] ... X = A[randint(L,R)] или так: from random import choice def qSort ( A, nStart, nEnd ): ... X = choice ( A[L:R+1] ) ... X = choice ( A[L:R+1] ) Быстрая сортировкаВ стиле Python: from random import choice def qSort ( A ): if len(A) <= 1: return A X = random.choice(A) B1 = [ b for b in A if b < X ] BX = [ b for b in A if b == X ] B2 = [ b for b in A if b > X ] return qSort(B1) + BX + qSort(B2) рекурсивные вызовы Что плохо? ? окончание рекурсии Asort = qSort( A ) |