Как упорядочить данные по возрастанию?, пример для массива записей |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Как упорядочить данные по возрастанию?, пример для массива записей |
Romtek |
29.06.2004 18:13
Сообщение
#1
|
|||
Знаток Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: 2 |
Программа показывает как отсортировать массив записей по возрасту.
Так можно упорядочить любую структуру данных. Надо только позаботиться о том, по какому критерию надо сортировать. По убыванию? Пожалуйста! Поменяйте знак в процедуре Compare. Код program SortRec; const N = 4; type TInfo = record Age: integer; { возраст } Name: string [20]; end; List = array [1..N] of TInfo; { массив записей содержит возраст и имя } { сравнивать по возрасту } function Compare (T1,T2: TInfo): integer; begin if T1.Age > T2.Age then Compare := 1 else if T1.Age = T2.Age then Compare := 0 else Compare := -1 end; procedure QuickSort (var A: List; Lo, Hi: Integer); var i,j: integer; x, y: TInfo; procedure Sort (l, r: Integer); begin repeat x := A[(l+r) shr 1]; i := l; j := r; repeat while Compare( A[i], x ) < 0 do inc(i); while Compare( A[j], x ) > 0 do dec(j); if i <= j then begin y := A[i]; A[i] := A[j]; A[j] := y; inc(i); dec(j); end; until i > j; if l < j then Sort (l, j); l := i; until l >= r; end; begin Sort (Lo,Hi); end; {QuickSort} var Data: List; I: Integer; begin { Main } { здесь заполнение массива записей } QuickSort (Data, 1, N); { сортировка массива записей от 1-й до N-й записи } { здесь вывод на экран массива записей } end. Если надо вывести список людей по алфавитному порядку, то здесь немного сложнее. Код function strcomp(Key1, Key2: String): Integer; var i,m,c: integer; begin c:=0; m:=length(Key1); if m>length(Key2) then m:=length(Key2); for i:=1 to m do begin c:=ord(Key1[i])-ord(Key2[i]); if c<>0 then break; end; strcomp:=c end;
-------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
|||
Текстовая версия | 27.04.2024 12:34 |