Алгоритмы сортировки
Download 60.95 Kb.
|
Алгоритмы сортировки - 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< // проход снизу вверх 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling