Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сортировка списков

Автор: Rom1k 17.05.2007 3:38

Нашёл сортировку списков методом вставки,который писал volvo .
Она мне не подходит.Мне нужна такая сортировка,которую можно применить несколько раз,так,как мне список сначала надо отсортировать по фамилиям,потом по среднему балу.

Имеется таковая?

Автор: volvo 17.05.2007 3:43

А что, мою несколько раз применить нельзя? Или ты просто не можешь сделать, чтобы функция сортировала список по разным полям (скажем, в зависимости от аргумента)?

Автор: Rom1k 17.05.2007 3:47

да.получается что я не могу(
вот ваша сортировка: http://forum.pascal.net.ru/lofiversion/index.php/t7992.html

Я не пойму что надо менять или вообще что надо делать,чтобы сначала по одному упорядочить,потом по другому...

Добавлено через 1 мин.
получается ,что надо писать одно и то же 2 раза ,только изменять аргумент в каджой сортировке?

Автор: volvo 17.05.2007 4:00

Цитата
получается ,что надо писать одно и то же 2 раза ,только изменять аргумент в каджой сортировке?
А если подумать? И сделать так:
type functype = function (a, b: node): boolean;

function insert_sort(l: plist; less: functype): plist;

function insert(a: plist; l: plist): plist;
begin
a^.next := nil;
if l = nil then insert := a
else
if less(a^, l^) then begin
a^.next := l; insert := a;
end
else begin
l^.next := insert(a, l^.next);
insert := l;
end;
end;

begin
if l = nil then insert_sort := nil
else insert_sort := insert(l, insert_sort(l^.next, less));
end;



И вызывать с разной функцией сравнения?

function less_1(a, b: node): boolean; far;
begin
less_1 := a.field_1 < b.field_1
end;
function less_2(a, b: node): boolean; far;
begin
less_2 := a.field_2 < b.field_2
end;

...
{ вызываем для упорядочивания по первому полю: }
first := insert_sort(first, less_1);
...
{ а теперь - сортируем по второму полю: }
first := insert_sort(first, less_2);
...


Попробуй...

Автор: Rom1k 17.05.2007 4:12

ага,сейчас попробую.спасибо!