Итак, сегодня мы разберем быструю сортировку массива и рассмотрим код. Эту тему я выложил в разделе статьи о Delphi, так как сам я предпочитаю Delphi Паскалю. Код практически идентичный, но в Delphi массив и его размерность мы передаем глобально. Итак, начнем.
Все вы наверное знаете сортировку пузырьком или какие-нибудь еще квадратичные сортировки. Такие сортировки выгодны, когда размерность массива мала, так как они работают за N^2 операций. Согласитесь, что для массива размерностью, например, в 100000 элементов такая сортировка не подходит, так как будет выполняться примерно 10000000000 операций.
Специально для таких ситуаций придумана быстрая сортировка(Quick Sort). Она работает за N log N. Что НАМНОГО быстрее квадратичной сортировки. Какова идея Qsort?
Qsort разбивает наш массив на участки, которые отделяются переменными l и r. Когда мы определили новый участок для обработки(изначально l = 1, r = N), мы выбираем рандомный элемент(X). Теперь просто нужно сделать так, чтобы все элементы массива до X были меньше X, а все элементы после X должны быть больше X. После этого мы выбираем новый участок для обработки.
Дальше предоставлен сам код, разбираться в нем не особо трудно, но лучше его запомнить, хотя вы всегда можете зайти на наш сайт и скопировать.
Примечание: Процедуру Swap нужно писать отдельно перед Quick Sort.
Все вы наверное знаете сортировку пузырьком или какие-нибудь еще квадратичные сортировки. Такие сортировки выгодны, когда размерность массива мала, так как они работают за N^2 операций. Согласитесь, что для массива размерностью, например, в 100000 элементов такая сортировка не подходит, так как будет выполняться примерно 10000000000 операций.
Специально для таких ситуаций придумана быстрая сортировка(Quick Sort). Она работает за N log N. Что НАМНОГО быстрее квадратичной сортировки. Какова идея Qsort?
Qsort разбивает наш массив на участки, которые отделяются переменными l и r. Когда мы определили новый участок для обработки(изначально l = 1, r = N), мы выбираем рандомный элемент(X). Теперь просто нужно сделать так, чтобы все элементы массива до X были меньше X, а все элементы после X должны быть больше X. После этого мы выбираем новый участок для обработки.
Дальше предоставлен сам код, разбираться в нем не особо трудно, но лучше его запомнить, хотя вы всегда можете зайти на наш сайт и скопировать.
- Код:
Procedure QSort(l, r: integer);
Var i, j, x: integer;
begin
i := l;
j := r;
x := a[l + random(r - l)];
While i < j do
begin
While a[i] < x do inc(i);
While a[j] > x do dec(j);
if i <= j then
begin
swap(a[i], a[j]);
inc(i); dec(j);
end;
end;
if i < r then QSort(i, r);
if l < j then QSort(l, j);
end;
Примечание: Процедуру Swap нужно писать отдельно перед Quick Sort.
Ср Окт 12, 2016 2:43 am автор SeriousPasha
» требуется несколько JS разработчиков
Пт Окт 07, 2016 10:19 pm автор mrktwn1
» Защита приложения от взлома
Чт Июн 18, 2015 10:28 pm автор stradi
» Ищите программиста или дизайнера?
Пт Мар 27, 2015 6:25 am автор фриланс
» Создание и продвижение сайтов, их развитие.
Ср Мар 25, 2015 12:40 am автор asdfghhgfdsa
» Исходники для студентов + скайп-консультации,помощь в написании программ
Вт Окт 07, 2014 11:25 pm автор Horpion
» IT- технологии для развития бизнеса
Пн Июн 23, 2014 6:11 pm автор dvos12
» Стенли Кубрик "С Широко закрытыми Глазами"
Чт Июн 12, 2014 2:01 am автор Vertuozzz
» Каталог популярных хостинг компаний
Сб Май 10, 2014 7:18 pm автор naik