Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка связанного списка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Chilly
Сортировка связанного списка методом "пузырька". Точнее надо этот код преобразовать для списка. Здесь с объектом, но это важно:

procedure O_Array.Job;
    var
       i,k,b:integer;
       f:boolean;
    begin
         if M=0 then
            begin
                 writeln('Error! Array is not create!');
                 writeln('Press any key...');
                 readkey;
                 exit;
            end;

            K:=M;
            repeat
                  K:=K-1;
                  f:=true;
                  for i:=1 to K do
                      if a^[i]<a^[i+1] then
                         begin
                              b:=a^[i];
                              a^[i]:=a^[i+1];
                              a^[i+1]:=b;
                              f:=false;
                         end;
            until f;
    end;
Altair
Для реалиации сортировки пузырем, тебе надо реализовать SWAP для 2 элементов списка.
FAQ читал? если да, то в реализации SWAP'a проблемм не будет!
p.s. кстати swap не обызательно делать для звена списка, достаточно для информационной части списка- так проще будет....
Chilly
Мне бы с исходником, а то я воще не шарю
volvo
Массив A как описан, можно посмотреть? Если его элементы достаточно большого размера, то придется мудрить с указателями, иначе Oleg_Z прав, легче поменять сами элементы...
Altair
volvo, ты имеешь ввиду под
Цитата
элементы достаточно большого размера

sizeof от элемента массива?
А где та граница, за которой надо будет мудрить с указателями?
Кстати интересно, что быстрее будет - поменять информационные части или мудрить с указателями?
volvo
Сколько указателей надо поменять, чтобы "поменять" местами 2 элемента списка? Естественно, если элемент массива - Byte или Integer, то проще поменять местами сами элементы... Если же у тебя A[i] это
Array [1 .. 75] Of LongInt
то я бы сильно подумал, прежде чем перетягивать такие объемы с места на место... ведь эта функция при пузырьковой сортировке будет выполняться сотни (если не тысячи) раз, так зачем же переносить данные, если можно сделать несколько операций с указателями?
Altair
Тогда надо вообщетак
IF размер допускает Then перемещаем элементы
else меняем указатели.

Только надо расчитать что это за размер "размер допускает", .....
думаю так будет наиболее функционально smile.gif
Chilly
Всем спасибо! Я уже сам сделал!
trminator
По идее, граница между "размер позволяет" и нет - что больше по размеру, указатель или содержимое. Указатель... эээ... ммм... двойное слово?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.