| Код | type str20 = string[20];
var Names: array[1..N] of str20; // массив строк (имён) Indices: array[1..N] of integer; // массив индексов сортируемых элементов
function StrComp (Key1, Key2: String): Integer;
{ Результат функции: 0, если строка1 = строка2 -1, если строка1 < строка2 1, если строка1 > строка2 }
var i, min, c, len1, len2: integer; begin c := 0; len1 := length (Key1); len2 := length (Key2); min := len1; if min > len2 then min := len2; for i := 1 to min do begin c := ord (Key1[i]) - ord (Key2[i]); if c <> 0 then break; end; if c = 0 then { Если с=0, то начала строк совпадают, значит больше та, которая длиннее } StrComp := len1 - len2 else StrComp := c; end;
Function Compare (Name1, Name2: str20): integer; // Функция сравнения для сортировки имён begin Compare := StrComp (Name1 , Name2) end; |
| Код | Для упорядочивания по возрастанию ставить условие Compare (Names[i], Names[j]) > 0
В самой процедуре сортировки меняешь местами не элементы Names[i] и Names[j], а индексы Indices[i] и Indices[j].
В результате будешь выводить имена по индексам массива Indices. Т.е. массив Names останется нетронутым, зато вывод его элементов - по возрастанию. |
Можно применить любой вид сортировки: простой, пузырьком, быстрой и другими. Смотри здесь: http://forum.sources.ru/index.php?showtopic=50914 |