Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2012, 21:39   #1
h8thumanity
Новичок
Джуниор
 
Регистрация: 12.11.2012
Сообщений: 2
По умолчанию сортировка массива по 2 параметрам delphi

Вообщем, есть задание отсортировать массив по длине строки ( по убыванию) и по алфавиту (от я до а), я не нашел более очевидного решения чем тупо сделать 2 цикла. Правильно ли это?

Код:
procedure getitsort(var a:Tarr; var count:integer; memo2:Tmemo);
var i,k,q:integer; s1,s2,tmp:string; ok:boolean;
begin
//po length
repeat
  ok:=true;
  for i:=1 to count-1 do
    if length(a[i])>length(a[i-1]) then
    begin
      tmp:=a[i-1];
      a[i-1]:=a[i];
      a[i]:=tmp;
      ok:=false;
    end;
until ok;

//po alfavitu
repeat
 ok:=true;
  for k:=1 to count-1 do
    if a[k]<a[k+1] then
   begin
    tmp:=a[k];
    a[k]:=a[k+1];
    a[k+1]:=tmp;
    ok:=false;
   end;
   until ok;




for q:=1 to count do
memo2.lines.add(a[q]);
h8thumanity вне форума Ответить с цитированием
Старый 12.11.2012, 21:57   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не смотрел код, но, судя по
Цитата:
я не нашел более очевидного решения чем тупо сделать 2 цикла.
Вы не правы!

дело в том, что когда идёт сортировка по нескольким параметрам, ВСЕГДА алгоритм такой. Сравниваем значение первого параметра. Если у одной записи он меньше - то она идёт раньше, если у записи параметер больше, то эта запись идёт позже. значения второго(третьего, четвёртного и т.д.) параметров нас уже НЕ ИНТЕРЕСУЮТ.
они вступают в силу если значения первого параметра у двух записей ОДИНАКОВЫЕ. Вот в этом случае, чтобы определить, какая запись идёт раньше, какая позже, начинаем сравнивать записи по второму параметру.

примерно так:
Код:
//po length, затем по алфавиту
repeat
  ok:=true;
  for i:=1 to count-1 do
    if (length(a[i])<length(a[i+1])) 
         or ((length(a[i])=length(a[i-1])) and (a[k]<a[k+1]) ) then
    begin
      tmp:=a[i-1];
      a[i-1]:=a[i];
      a[i]:=tmp;
      ok:=false;
    end;    
until ok;

Последний раз редактировалось Serge_Bliznykov; 12.11.2012 в 22:01.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.11.2012, 22:45   #3
h8thumanity
Новичок
Джуниор
 
Регистрация: 12.11.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не смотрел код, но, судя по

Вы не правы!

дело в том, что когда идёт сортировка по нескольким параметрам, ВСЕГДА алгоритм такой. Сравниваем значение первого параметра. Если у одной записи он меньше - то она идёт раньше, если у записи параметер больше, то эта запись идёт позже. значения второго(третьего, четвёртного и т.д.) параметров нас уже НЕ ИНТЕРЕСУЮТ.
они вступают в силу если значения первого параметра у двух записей ОДИНАКОВЫЕ. Вот в этом случае, чтобы определить, какая запись идёт раньше, какая позже, начинаем сравнивать записи по второму параметру.

примерно так:
Код:
//po length, затем по алфавиту
repeat
  ok:=true;
  for i:=1 to count-1 do
    if (length(a[i])<length(a[i+1])) 
         or ((length(a[i])=length(a[i-1])) and (a[k]<a[k+1]) ) then
    begin
      tmp:=a[i-1];
      a[i-1]:=a[i];
      a[i]:=tmp;
      ok:=false;
    end;    
until ok;
ошибку говорит
Изображения
Тип файла: jpg Deadmau5-deadmau5-7985627-1440-900.jpg (20.8 Кб, 137 просмотров)
h8thumanity вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Сортировка массива koshkarjov Помощь студентам 11 19.09.2012 06:55
Сортировка массива в Delphi Ника_1 Помощь студентам 6 13.11.2011 02:48
Быстрая сортировка массива по двум параметрам. С#. Necare Помощь студентам 2 14.09.2011 19:01
Сортировка значений по двум параметрам bvkdrv Microsoft Office Excel 11 06.02.2011 21:35
Delphi. Сортировка массива eluminat Помощь студентам 4 30.06.2009 11:55