Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив WinRAR / лекции / Bystraya_sortirovka.ppt
Скачиваний:
12
Добавлен:
20.04.2015
Размер:
67.58 Кб
Скачать

Методы сортировки

Быстрая сортировка (Ч. Хоар )

1этап

1.Выбираем наугад некоторый элемент –x

2.Будем просматривать массив слева, пока не встретим элемент аi>x

3.Затем будем просматривать массив справа, пока не встретим элемент аj<x

4.Поменяем местами эти элементы

5.Будем повторять процесс, пока i<j

Быстрая сортировка (Ч. Хоар )

После первого этапа массив будет разделен на две части:

В первой части–все элементы меньшие х Во второй части–все элементы, большие х.

Применяем данный алгоритм к получившимся частям, затем – к частям частей и т.д., пока в каждой части не останется 1 элемент.

Быстрая сортировка x=42

44 52 12 22 94 42 55 13 25 18 89 i=1, j=11 ---- i=1, j=10 ---- i=2, j=9 18 52 12 22 94 42 55 13 25 44 89 i=2, j=9 ---- i=2, j=9 ---- i=3, j=8 18 25 12 22 94 42 55 13 52 44 89 I=3, j=8 ---- i=5, j=8 ---- i=6, j=8 18 25 12 22 13 42 55 94 52 44 89 i=6, j=8 ---- i=6, j=5 –-- i=6, j=5

Элементы a1, a2, …ai-1 имеют значения <= x Элементы ai, ai+1, …an n имеют значения > x

Улучшенные методы сортировки: Быстрая сортировка

18 25 12 22 13 42 55 94 52 44 89 i=7, j=8

Разбиваем массив на две части (1,6) --- (7,11)

Повторяем процесс для каждой части по отдельности

Быстрая сортировка void Quick_sort(int L, int R)

{int i,j, x, y; i =L; j=R;

x=a[(L+R)/2]; do {

while (a[i]<x) i++; while (a[j]>x) j--; if(i <=j)

{ y=a[i]; a[i]=a[j]; a[j]=y; i ++;j--;}

}

while (i<=j);

Быстрая сортировка

if(L<j) Quick_sort(L, j); if(i<R) Quick_sort(i, R); } //end Quick_sort

Вызов функции Quick_sort(1,n);

n – количество элементов массива

Соседние файлы в папке лекции