Алгоритмы сортировки


Download 60.95 Kb.
bet2/7
Sana19.08.2023
Hajmi60.95 Kb.
#1668327
TuriРеферат
1   2   3   4   5   6   7
Bog'liq
Алгоритмы сортировки - StudentLib

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


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


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

Листинг 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 60.95 Kb.

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




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