Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций по курсу 'Информатика'.doc
Скачиваний:
4
Добавлен:
14.07.2019
Размер:
483.84 Кб
Скачать

Сортировка вектора.

Существует огромное количество различных алгоритмов сортировки. Рассмотрим самые простые из них. Сортировка вектора по возрастанию (убыванию) значений его элементов.

  1. Сортировка выбором.

Рассмотрим вектор 11 4 -3 5 10 8 12 6 4 0 отсортируем его значения по убыванию.

Найдем максимальный элемент вектора - 12. Переставим местами первый элемент и максимальный.

12 4 -3 5 10 8 11 6 4 0 Теперь рассмотрим вектор начиная со второго элемента, найдем в нем

12 11 -3 5 10 8 4 6 4 0 максимум – 11, переставим его местами со вторым элементом, и т. д.

12 11 10 5 -3 8 4 6 4 0 пока не останется один элемент вектора, соответственно самый

12 11 10 8 -3 5 4 6 4 0 маленький.

12 11 10 8 6 5 4 -3 4 0

12 11 10 8 6 5 4 4-3 0

12 11 10 8 6 5 4 4 0-3

Рассмотрим программу, реализующую данный алгоритм.

int vec[10]={ 11, 4, -3, 5, 10, 8, 12, 6, 4, 0 } ;

int i, j, max, nmax ;

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

{

max=vec[i] ;

nmax=i ;

for ( j=i ; j<10 ; i++)

if ( max< vec[j]) {

max=vec[j] ;

nmax=j ;

}

vec[nmax]=vec[i] ;

vec[i]=max ;

}

for ( i=0 ; i<10 ; i++) printf(“%d “, vec[i]) ;

Очевидно, если ввести с экрана любой другой вектор, то алгоритм будет работать и для него.

  1. Пузырьковая сортировка.

Рассмотрим вектор 11 4 -3 5 10 8 12 6 4 0 отсортируем его значения по убыванию.

Рассмотрим пару соседних элементов, 11 4, если предыдущий меньше последующего, то переставим их местами, в противном случае оставим все без изменения и перейдем к соседней паре 4 -3. Продолжая таким образом двигаться по вектору, к концу первого прохода «всплывет» самый маленький элемент.

11 4 5 -3 10 8 12 6 4 0

11 4 5 10 -3 8 12 6 4 0

11 4 5 10 8 -3 12 6 4 0

11 4 5 10 8 12 -3 6 4 0

11 4 5 10 8 12 6 -3 4 0

11 4 5 10 8 12 6 4 -3 0

11 4 5 10 8 12 6 4 0 -3

Далее алгоритм повторяется с первого до предпоследнего элемента, «всплывает» следующий самый маленький.

11 5 10 8 12 6 4 4 0 -3

Теперь два последних элемента стоят на своих местах, повторяем процесс, не доходя два элемента до конца и т. д. пока не останется на первом месте самый большой элемент.

11 5 10 8 12 6 4 4 0 -3

12 11 10 8 6 5 4 4 0 -3

Попробуйте составить программу, она точно также как предыдущая будет иметь два вложенных цикла.

3. Сортировка вставкой.

Рассмотрим вектор 11 4 -3 5 10 8 12 6 4 0 отсортируем его значения по убыванию.

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

11 4 -3 5 10 8 12 6 4 0 оставляем на месте, теперь рассмотрим упорядоченный вектор из двух

11 4 -3 5 10 8 12 6 4 0 элементов, найдем в нем место третьего. Опять остается на месте.

11 5 4-3 10 8 12 6 4 0 А вот - 5 нужно вставить между 11 и 4, после чего вектор из четырех

элементов будет упорядочен. Дальше ищем место - 10 и т. д. пока

12 11 10 8 6 5 4 4 0 -3 весь вектор не станет упорядоченным.

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