Студопедия

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

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

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






Алгоритм простого выбора (выбором)






Методы внутренней сортировки

Пусть определен следующий тип данных

type mas = array [1.. n ] of typel;

var a: mas;

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

Алгоритм простой вставки (прямого включения)

Метод основан на использовании двух подпоследовательностей:

ü готовую отсортированную часть, начиная с первого элемента (a 1.. a i);

ü входную, из которой вначале выбираются элементы (a i.. a n).

На каждом i –ом шаге сортировки из входной последовательности выбирается j –ый элемент и в готовой последовательности определяется соответствующее место вставки элементов. На шаге n – 1 массив отсортирован.

Отсортированная часть рассматривается с конца. Элемент a i сравнивается последовательно с ai-1, ai-2 … и ищется место a i в упорядоченной последовательности. Ищется первый элемент a j < a i и a i вставляется правее a j.

Если выполняется сортировка в порядке возрастания, то осуществляется поиск соответствующего места «справа – налево» до тех пор пока выполняется условие x < a j, где x – сортируемый элемент.

Пусть дана последовательность целых чисел:

44 55 12 42 94 18 6 67

1) 44 55 12 42 94 18 6 67

2) 12 44 55 42 94 18 6 67

3) 12 42 44 55 94 18 6 67

4) 12 18 42 44 45 94 6 67

procedure IncludeSort;

var i, j: integer;

x: typel;

Begin

for i: = 2 to n do

Begin

x: = a [ i ]; j: = i – 1;

while (a [ i ] > x) and (j > 0) do

Begin

a [ j + 1]: = a [ j ]; j: = j – 1;

end;

a [ j + 1]: = x;

end;

end;

Оценка» ½ перемещений и пересылок

Cmin = n – 1 Mmin = 3(n –1)

Cср = (n2 + n – 2)/4 Mср = (n2 + 9n –10)/4

Cmax = (n2 + n – 4)/4 Mmax = (n2 + 3n –4)/4

 

Общее число пересылок и перемещений

Tn = О (n2) C = О (n 2) M = O (n 2)

В качестве улучшения данного алгоритма придется ускорить поиск места для вставки с помощью метода половинного деления (заменить цикл while в упорядоченной части).Число сравнений уменьшится C = О (n log 2 n), а число перестановок то же, что не дает значительного эффекта.

Если алгоритм применить к отсортированному массиву, то цикл while вырождается, т.е алгоритм реагирует на предварительную отсортированность массива (хотя бы частичную).

Алгоритм простого выбора (выбором)

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

44 55 12 42 94 18 6 67

Иначе говоря данный алгоритм является пошаговым и на каждом шаге массив разбивается на два подмассива:

ü отсортированный

ü неотсортированный

i = 1, …, n – 1.

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

В нашем примере

1) 6 55 12 42 94 18 44 67

2) 6 12 55 42 94 18 44 67

3) 6 12 18 42 94 55 44 67

4) 6 12 18 42 44 55 94 67

5) 6 12 18 42 44 55 67 94

Алгоритм:

procedure SelectSort;

var i, j, m: integer; x: typel;

Begin

for i: = 1 to n – 1 do

Begin

m: = i;

for j: = i +1 to n do

if a [ j ] < a [ m ] then m: = j;

x: = a [ i ]; a [ i ]: = a [ m ]; a [ m ]: = x;

end;

end;

Оценка по числу сравнений:

Mmin = 3(n–1) Mср = n (ln (n)+ g) Mmax = n 2/4 + 3(n –1)

g – константа Эйлера (0.577216).

Число сравнений C = O (n 2); число перемещений M = O (n log2 n).

Общая оценка T n = O (n 2).

Алгоритм не реагирует на предварительную сортировку.

 






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