Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Сортировка методом пузырька






 

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

Суть метода заключается в переборе всех элементов массива и, если на текущей итерации некоторая пара соседних элементов массива расположены в неправильном порядке, то они меняются местами. После этого, перебор всех элементов начинается до отсортированного элемента на предыдущем проходе, и так далее до прохождения всех проходов (n). Таким образом, после каждого прохода самый «легкий» элемент окажется на самом верху перед более «легкими» элементами. Если образно представить массив вертикально от 0-го элемента сверху и n-1 элемента снизу (где n – кол-во элементов массива), то при каждом проходе по одному «легкому» элементу массива будут подниматься наверх, как пузырьки, отсюда и название метода.

Переведем эту задачу в алгоритм для написания в дальнейшем его кода:

1. Так, как нужно повторить «всплытие» для каждого элемента массива, нужно создать цикл, с кол-вом итераций, равным кол-ву элементов массива. Каждое «всплытие» элемента будет устанавливаться в начало массива до более «легкого» элемента, т.к. на каждом следующем проходе будут «всплывать» все более «тяжелые» элементы, поэтому ориентируем цикл от минимального к максимальному индексам:

for (i=0; i< size; i++)

2. Для «всплытия» более «легкого» элемента наверх, перебираем массив от нижнего элемента до элемента, который уже «всплыл» на предыдущих проходах. Для этого создаем внутренний цикл с счетчиком-переменной, меняющейся от нижнего индекса массива до уже упорядоченного элемента i:

for (j=size-1; j> i; j--)

3. Для «всплытия» более «легкого» элемента наверх, поменяем местами соседнюю пару элементов, если они находятся в неправильном порядке. Для замены местами, используем вспомогательную переменную:

if (array[j-1]> array[j]) {

x=array[j-1];

array[j-1]=array[j];

array[j]=x;

}

 

Таким образом, блок-схема и весь алгоритм выглядит так:

Рис. 1.1. Блок-схема сортировки Пузырьком

 

 

long i, j, x;

for (i=0; i< size; i++){

for (j=size-1; j> i; j--){

if (array[j-1]> array[j]) {

x=array[j-1];

array[j-1]=array[j];

array[j]=x;

}

}

}

 

Среднее число сравнений и обменов имеют квадратичный порядок роста: Theta(n2), отсюда можно заключить, что алгоритм пузырька очень медленен и малоэффективен. Поскольку одинаковые элементы не меняются местами, можно сделать вывод, что алгоритм устойчивый. Поведение алгоритма неестественное, т.к. по уже отсортированным до алгоритма элементам, также делаются проходы и сравнения.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.