Улучшенные алгоритмы сортировки данных. Быстрая сортировка. Реализация в С++


Download 0.9 Mb.
bet1/6
Sana26.10.2023
Hajmi0.9 Mb.
#1724670
TuriРеферат
  1   2   3   4   5   6
Bog'liq
тату


Реферат на тему:
Улучшенные алгоритмы сортировки данных. Быстрая сортировка. Реализация в С++.



Введение


Алгоритмы сортировки обрабатывают массивы элементов любого типа. Такая задача подразумевает упорядочивание элементов массива в определенном порядке. Обычно по возрастанию и убыванию данных. Упорядочить набор данных означает переставить элементы в определенном порядке так, чтобы шло возрастание или убывание с каждым шагом.


Известные алгоритмы сортировки данных, расположенных в оперативной памяти, чрезвычайно разнообразны. Их анализ очень полезен с точки зрения обучения, так как в них используются практически все универсальные приемы конструирования алгоритмов любой сложности.
Алгоритм сортировки - это алгоритм, который помогает упорядочить набор данных в таблице в определенную последовательность. Обычно, массивы сортируют по убыванию и возрастанию.
В связи с разнообразием задач на сортировку данных таблиц, существует много разных метод сортировки, которые целесообразно использовать в различных ситуациях, в целях экономии средств компьютера и времени пользователя.
В данной работе я рассмотрела наиболее используемые алгоритмы сортировки: сортировка пузырьком, выбором, вставками, метод Шелла и быстрая сортировка.


Метод пузырька


Метод пузырька (сортировка пузырьком) является, пожалуй, наиболее распространенным алгоритмом сортировки данных в массиве.


Название этого метода пошло от аналогии с поднимающимся пузырьком. На своем пути он проходит все слои, каждый элемент, что и применяется в этом алгоритме. Сам метод предполагает проход массива снизу вверх и сравнение ближайших элементов. Если какие-то из проверенных элементов массива находятся не в правильной последовательности, то меняем их местами и продолжаем сравнивать дальше.
С точки зрения блок-схем алгоритм сортировки пузырьком по убыванию выглядит так:

На языке программирования С++ код сортировки пузырьком выглядит так:


Листинг 1. bublе. срр


#inсludе
using namеsрaсе std;
vоid main ()
{arr [5];i=0;оr (i=0; i<5; i++) {
сin>>arr [i]; // инициализация массива
}
fоr (i=0; i<5; i++) { // цикл сортировки пузырьком
if (arr [i] }
}еm (“рausе”);
}

Так как на прохождение всего массива требуется очень много времени, то можно заключить, что алгоритм пузырька очень медленен и малоэффективен. Тем не менее, он все же имеет плюс: его можно легко улучшать за счет его простоты.


Рассмотрим улучшения, которые можно привнести в этот алгоритм.
Во-первых, можно запоминать производился ли на данном проходе как-либо обмен, и если нет, то алгоритм заканчивает работу. Это позволит избежать излишнего прохода по массиву, когда и так понятно, что он уже отсортирован. Это улучшение можно так же модернизировать, запоминая не только событие обмена, но и индекс последнего обмена n. Все пары соседних элементов с индексами, меньшими n, уже расположены в нужном порядке. Дальнейшие проходы можно заканчивать на индексе n, вместо того чтобы двигаться до установленной заранее верхней границы i.
Еще одним качественным улучшением является модернизация алгоритма до Шейкер-сортировки. Такая сортировка отличается тем, что в ней проходы по массиву с каждым шагом меняют свое направление.
Код такой сортировки на С++ выглядит так:

Листинг 2. shakе. срр


#inсludе
using namеsрaсе std;оid main ()
{
int sizе; сin<int arr [sizе];оng j, k = sizе-1;оng lb=1, ub = sizе-1; // границы неотсортированной части массива
// проход снизу вверх
dо {
fоr (j=ub; j>0; j--) {
if (a [j-1] > a [j]) {x=0;=a [j-1]; a [j-1] =a [j]; a [j] =x;=j;
}
}
lb = k+1;
// проход сверху вниз
fоr (j=1; j<=ub; j++) {(a [j-1] > a [j]) {x=0;=a [j-1]; a [j-1] =a [j]; a [j] =x;=j;
}
}= k-1;
} whilе (lb < ub);еm (“рausе”);
}

Такие улучшения хоть и уменьшают время, требуемое на отсортировку массива, но не уменьшают количество требуемых обменов.


На практике метод пузырька почти не применяется.



Download 0.9 Mb.

Do'stlaringiz bilan baham:
  1   2   3   4   5   6




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling