08.04.2011, 21:58 | #1 (permalink) |
Member
Регистрация: 03.12.2010
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Сортировка в Pascal
В задании необходимо разработать программу, в которой выполняется ввод списка записей определенного типа, а затем - сортировка списка по алгоритму Шелла. Сначала в программе должен вводиться размер списка (целое число), а затем сам список. Ввод одной записи осуществляется в одной строке в соответствии с форматом. СТУДЕНТ: ` фамилия, имя, отчество (строки по 15 символов); ` курс (целое число от 1 до 5); ` средний балл (вещественное число от 1 до 10). Формат ввода: Фамилия Имя Отчество [курс], средний балл По алгоритму Шелла:Идея алгоритма Шелла состоит в том, что в исходном наборе элементов (массиве) сначала упоря-дочиваются элементы, расположенные на расстоянии друг от друга, т.е. итерации по массиву осущест-вляются через несколько элементов. Затем шаг уменьшается и производится сортировка с новым раз-мером шага. Так продолжается до тех пор, пока шаг не станет равным единице. Таким образом, алго-ритм Шелла представляет собой обычный медленный алгоритм сортировки, в котором ускорение про-цесса осуществляется за счет того, что на первых этапах (с большим шагом) обрабатывается меньше элементов, и они упорядочиваются быстрее, перемещаясь по массиву с большими шагами. |
08.04.2011, 21:58 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Так же на нашем форуме встречались темы, которые схожи с вашими Сортировка по алфавиту Сортировка по алфавиту(помогите) Сортировка в Паскале Сортировка одномерного массива |
10.04.2011, 09:10 | #2 (permalink) |
Member
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
|
У меня получилось так:
Код:
program Sortirovka; uses crt; type zap=record FIO:string[45]; kurs:byte; bal:real; end; label m,m1; var rec:zap; FIO:string; q,i,n,p,t,k,d:integer; c:array[1..45] of zap; begin clrscr; write('Введите количество записей: '); readln(n); for i:=1 to n do with c[i] do begin write('Фамилия:',I,': '); readln(c[i].FIO); write('Курс:',I,': '); readln(c[i].kurs); write('Средний балл:',d,': '); readln(c[i].bal); end; while p<>n-1 do begin p:=0; for i:=1 to n-1 do if c[i].FIO>c[i+1].FIO then begin k:=i; goto m; end else p:=p+1; m: if p=n-1 then goto m1; for i:=k to n do if c[k].FIO>c[i].FIO then t:=i; rec:=c[k]; c[k]:=c[t]; c[t]:=rec; end; m1: writeln('ОТСОРТИРОВАНО:'); for i:=1 to n do with c[i] do begin writeln(c[i].FIO,' (',c[i].kurs,') (',c[i].bal,')'); end; end. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|