|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Сортування вибором (модифіковане)
Сортування передбачає два завдання: 1)пошук у таблиці min i max елементів і їхніх порядкових номерів; 2)перестановка min елементів у початок таблиці, а max – у кінець.
Знаходимо спочатку у всій таблиці min i max елемнти і їхні порядкові номери. У нашому випадку мінімальний елемент 2, він стоїть на 4-му місці в таблиці, а максимальний елемент 11, він стоїть на 2-му місці в таблиці. Проводимо обмін min елемента з першим і max елемента з останнім елементом таблиці. ПЕРЕД ОБМІНОМ max ЕЛЕМЕНТА ОБОВ’ЯЗКОВО ТРЕБА ПЕРЕВІРИТИ, ЧИ НЕ БУВ У РЕЗУЛЬТАТІ ОБМІНУ МІНІМАЛЬНОГО ЕЛЕМЕНТА ПЕРЕМІЩЕНИЙ МАКСИМАЛЬНИЙ ЕЛЕМЕНТ. ЯКЩО ТАК, ТО ЗНАЧЕННЮ ІНДЕКСУ МАКСИМАЛЬНОГО ЕЛЕМЕНТА ПРИСВОЮЄТЬСЯ ЗНАЧЕННЯ ІНДЕКСУ МІНІМАЛЬНОГО ЕЛЕМЕНТА! Потім повторюються ті самі дії, але вже без першого і останнього елементів таблиці (рис.4).
Сортування методом прямого вибору (модифіковане) мовою Паскаль має вигляд: Program Sort; const n=200; type arr = array [1..n] of real; Procedure Min_Max(M: arr; var Min, Max: word, left, right: word); var i: word; Begin Min:=left; Max:=left; for i:=left to right do Begin if M[i]<M[Min] then Min:=i; if M[i]>M[Max] then Max:=i; end; end; var A: arr; j: word; e1: real; L, R: word; Min, Max: word; Begin for j:=1 to n do Begin A[j]:=random*200 – random*100; write (A[j]:8:2); end; L:=1; R:=n; writeln; while L<R do Begin Min_Max (A, Min, Max, L, R); e1:=A[L]; A[L]:=A[Min]; A[Min]:=e1; if Max=L then Max:=Min; e1:=A[R]; A[R]:=A[max]; A[Max]:=e1; L:=L+1; R:=R – 1; end; for j:=1 to n do write (A[j]:8:2); end. Оскільки процедура Min_Max знаходить номери найменшого та найбільшого елементів, необхідно після переміни місцями мінімального та найлівішого елементів перевірити, чи не був цей найлівіший елемент максимальним. Якщо таке трапилось, очевидно, що максимальний елемент тепер зайняв місце мінімального, і тому необхідно змінити номер максимального елемента.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |