Сортировки элементов массива методом выбора
Сортировка выбором
Рассмотрим сортировку простым выбором. Задача сортировки элементов массива достаточно сложная для учащихся задача алгоритмизации. Метод упорядочения элементов линейного массива методом выбора опирается на задачу поиска минимального (максимального) элемента массива. Задачу поиска минимального (максимального) элемента массива учащиеся должны рассмотреть при изучении темы «Поиск заданного элемента в массиве».
Прежде чем переходить к формулировке алгоритмов в терминах алгоритмического языки, нужно рассмотреть основную идею, на которой основывается алгоритм упорядочения. Суть используемого приема состоит в последовательном рассмотрении ряда массивов A[1:n], A[2:n], A[3:n], A[4:n], …, A[n-1:n], составленных из элементов исходного массива, каждый из которых содержит на один элемент меньше, чем предыдущий. В каждом из этих массивов отыскивается наименьший элемент, который тут же переставляется местами с первым элементом рассматриваемого массива (первый раз – с A[1], второй раз – с A[2], третий – с A[3], … , последний раз – с A[n-1]). Процесс заканчивается, когда остаётся один элемент исходного массива. Понятно, что совокупность, не рассматриваемых на каждом этапе элементов массива, образует в результате массив, упорядоченный по возрастанию. Используемый прием лучше всего пояснить на конкретном примере, моделируя память компьютера. Пусть имеется линейный массив A[1:5], состоящий из пяти элементов:
A[1] | A[2] | A[3] | A[4] | A[5] |
В первой строке таблицы записаны имена элементов массива. Во второй строке – индексы элементов массива. В третьей строке – значения соответствующих элементов массива. Выберем в таблице минимальный элемент, это элемент A[3] =15, и переставим его с первым элементом, A[1] = 24, A[1] « A[3]. Получим таблицу:
A[1] | A[2] | A[3] | A[4] | A[5] |
Отставим теперь в сторону первый элемент массива, он стоит на своём месте, и будем рассматривать новый массив A[2:5], образованный из прежнего, отбрасыванием первого элемента:
A[1] | A[2] | A[3] | A[4] | A[5] | |
Найдем теперь минимальный элемент в новом массиве A[2:5], это элемент A[4] = 18, переставим его со вторым элементом, A[2] = 19, A[2] « A[4]. Получим таблицу:
A[1] | A[2] | A[3] | A[4] | A[5] | |
Элемент A[2] массива стоит на своём месте в получаемом отсортированном массиве, отставим его в сторону:
A[1] | A[2] | A[3] | A[4] | A[5] | |
Найдем теперь минимальный элемент в новом массиве A[3:5], это элемент A[4] = 19, переставим его с третьим элементом массива, A[3] = 24, A[3] « A[4]. Получим таблицу:
A[1] | A[2] | A[3] | A[4] | A[5] | |
Элемент A[3] массива стоит на своём месте в получаемом отсортированном массиве, отставим его в сторону.
A[1] | A[2] | A[3] | A[4] | A[5] | |
Найдем теперь минимальный элемент в массиве A[4:5], это элемент A[5] = 22, переставим его с четвёртым элементом массива, A[4] = 24, A[4] « A[5]. Получим таблицу:
A[1] | A[2] | A[3] | A[4] | A[5] | |
Элемент A[4] массива стоит на своём месте в получаемом отсортированном массиве, отставим его в сторону.
A[1] | A[2] | A[3] | A[4] | A[5] | |
Последний элемент A[5] массива при данной сортировке всегда стоит на своём месте в получаемом отсортированном массиве, его тоже можно отставить влево.
Получим окончательное решение в виде такой таблицы:
A[1] | A[2] | A[3] | A[4] | A[5] |
Третья строка таблицы – элементы отсортированного массива.
При рассмотрении примера, видно, что вполне самостоятельную часть алгоритма упорядочения элементов массива этим методом, составляет алгоритм нахождения минимального элемента в массиве A[k:n], где k изменяется от 1 до n-1. Можно сделать вывод, что алгоритм поиска минимального элемента в массиве A[k:n] можно рассматривать как вспомогательный по отношению к основному алгоритму упорядочения массива.
Пример программы сортировки элементов массива методом простого выбора
алг сортвыбор (аргцел n) начцел i,k,b,целтаб a[1:n] │input(n,a) │print(n,a) │нцдля i от 1 до n-1 ││индмин (i,n,a,k) ││|обмен значениями a[i] и a[k] ││b:=a[i]; a[i]:=a[k];a[k]:=b ││print(n,a) │кц кон алг индмин (аргцел i,n,аргцелтаб a[1:n],резцел k) начцел min1,j │|поиск k – индекса минимального │|элемента в массиве, начиная │|с номера i до номера n │min1:=a[i]; k:=i │нцдля j от i+1 до n ││если min1>a[j] │││то │││ min1:=a[j] │││ k:=j ││все │кц кон | алг print (аргцел n,аргцелтаб a[1:n]) начцел i │|вывод элементов массива │выводнс │нцдля i от 1 до n ││вывод a[i]," " │кц кон алг input (аргцел n,резцелтаб a[1:n]) начцел i │|ввод элементов массива │нцдля i от 1 до n ││вывод "a[",i,"]= " ││ввод a[i] │кц кон |
Таблица 9. Программа сортировки элементов массива методом простого выбора на языке Ершол |
При составлении программы сортировки элементов массива методом простого выбора применим технологию проектирования алгоритма «снизу вверх». При рассмотрении примера было выяснено, что для получения результата необходимо n-1 раз последовательно находить индекс k минимального элемента массивов A[1:n],A[2:n], A[3:n], A[4:n], … , A[n-1:n], составленных из элементов исходного массива, каждый из которых содержит на один элемент меньше, чем предыдущий. Далее элемент A[k] тут же необходимо переставить местами с первым элементом рассматриваемого массива (первый раз с – A[1], второй раз – с A[2], третий – с A[3], … , последний раз – с A[n-1]). Процесс заканчивается, когда остаётся один элемент исходного массива. Алгоритм сортировки можно записать так:
алг сортвыбор
нач
1шаг. Введи элементы массива в память компьютера.
2 шаг. Для i, изменяющегося от 1 до n-1, выполни следующие шаги.
2.1 шаг. Найди номер k минимального элемента массива a[i:n].
2.2 шаг. Поменяй местами a[i] и a[k].
2.3 шаг. Организуй вывод элементов массива, полученных при прохождении текущего цикла.
кон
Для составления программы, реализующей шаги 1 и 2.3 алгоритма, воспользуемся подпрограммами, составленными на странице 174.
Замечание: Процедура на Turbo Delphi, имитирующая механизм исполнения сортировки методом простого выбора, представлена в приложении 2.
Дата добавления: 2015-01-26; просмотров: 1611;