Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Sitkin_Informatika_Programmirovanie_v_DELPHI.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
600.56 Кб
Скачать

Сортировкамассивов

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

Существует много алгоритмов сортировки, которые отличают-ся друг от друга по скорости работы, что заметно на больших масси-вах,длянебольшихмассивовможно использоватьпростыеизних.

Сортировкаметодомобмена(метод«пузырька»)

Суть данного метода сортировки по возрастанию состоит в сле-дующем. Каждый элемент массива, начиная с первого и заканчиваяпредпоследним, сравнивается со следующим элементом. Если теку-щий элемент больше следующего, то элементы меняются местами.Циклический процесс просмотра всех элементов массива повторяетсястолько раз, сколько элементов в массиве минус единица.Таким об-разом более «лёгкие» элементы массива постепенно продвигаются кначалу («всплывают»), а более «тяжёлые»к концу («тонут»).Этоталгоритм простой, но очень медленный. Его можно несколько уско-рить, если массив изначально частично отсортирован. Для этого вво-дитсяпеременная-признак,контролирующаяпроцессобмена.Еслипри очередном просмотре массива не было ни одной перестановки, тоэто значит, что массив отсортирован и, в соответствии со значениемпеременной-признаком,процессзавершается.

На рис. 9.8 представлена блок-схема описанного алгоритма сор-тировки. Чтобы не отвлекаться на второстепенные действия ввода ивывода массива, процесс сортировки представлен в виде пользова-тельской процедуры, причём с формальным открытым параметром-массивом, что позволит сортировать передаваемые в процедуру фак-тические массивыпроизвольной длины. Напомним,чтонумерацияэлементов у такого массива начинается с нуля. Для возможности воз-вратаввызывающийблок,массивсделанпараметром-переменной.

procedureSort_obmen(vart:arrayofreal);

varbuf:real;//длявременногохранения элемента

k:byte;

f:boolean;//переменная-признак

begin

repeat//внешнийциклконтроляобменов

f:=false;//пустьобменовнебыло

fork:=0tohigh(t)-1do//отначальногодо

//предпоследнегоэлементамассива(напомним,

//ф-я high сама отнимает единицу от числа эл-ов)ift[k]>t[k+1]then//если текущий элементbegin//большеследующего,топоменятьих

buf:=t[k]; //местами с использованиемt[k]:=t[k+1]; //буферной переменнойt[k+1]:=buf;

f:=true;//обмен состоялся

end;

untilnotf;//дотехпор,покаобменнесостоялся

end;

Рис.9.8

Сортировкаметодомвыбора

Суть данного метода сортировки по возрастанию состоит в сле-дующем. Начиная с первого элемента, просматривается массив, нахо-дитсяминимальныйэлемент,которыйставитсянаместопервого,а

первыйзанимаетместоминимального.Затем,начиная со второго элемента, просматриваетсяоставшаясячастьмассива,находитсямини-мальныйэлемент,которыйменяетсяместамисовторым,ит.д.допредпоследнегоэлемента.Блок-схемаописанногоалгоритмапредстав-ленанарис.9.9.Какивпредыдущемметоде,процесссортировкиоформим ввидепользо-вательской процедуры с открытым массивом.procedureSort_vubor(vart:arrayofreal);

varbuf:real;min, m, n:byte;begin

form:=0tohigh(t)-1do//от начального доbegin//предпоследнего элемента массиваmin:=m;//пустьномер миним.эл-таравенm

forn:=m+1tohigh(t)do//циклпоискаминим.ift[n]<t[min]thenmin:=n; //элементаbuf:=t[m]; //перестановка первого элементаt[m]:=t[min]; //в оставшейся последовательностиt[min]:=buf;//сминимальнымчерезбуф.пер-ную

end;

end;

Рис.9.9