Блог пользователя dronoff

Автор dronoff, 14 лет назад, По-русски
Подскажите пожалуйста...нужно отсортировать 2 массив по двум ключам)но при написание Qsort - а сравнить два ключа он не захотел...нужно отсортировать по ключу Х, и при равенстве первее в массиве ставится тот у которого ключ У больше)Подскажите в чем ошибка)
function comp(i, j : integer): boolean;
begin
  comp := false;
  if (x[i] < x[j]) then
    comp := true else
      if (x[i] = x[j]) and (y[i] > y[j]) then
        comp := true;
end;
procedure qsort(l, r : longint);
var
  m, t, i, j : int;
begin
   i := l; j := r;
   m := random(r - l + 1) + l;
   repeat
      while comp(i, m) do inc(i);
      while comp(m, j) do dec(j);
      if i <= j then begin
         swap(x[i], x[j]);
 swap(y[i], y[j]);inc(i);dec(j);
      end;
   until i > j;
   if i < r then qsort(i, r);
   if l < j then qsort(l, j);
end;
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится
Сохрани элемент под номером m в отдельную ячейку. Должно заработать.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Нам же нужно делать сравнение по двум ключам!Или я не понимаю, напишите пожалуйста часть кода:)спасиоб)
  • 14 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
       m := random(r - l + 1) + l;
       x[VeryBig] := x[m];
       y[VeryBig] := y[m];
       m := VeryBig;

    где VeryBig, это «служебный» элемент массива, который не должен больше нигде использоваться и/или изменяться, кроме как тут.