Алгоритм сортировки двумерной матрицы
От: sj  
Дата: 18.01.02 12:21
Оценка:
Подскажите оптимальный алгоритм сортировки по возрастанию
двумерной матрицы по двум столбцам.
Re: Алгоритм сортировки двумерной матрицы
От: Lexey Россия  
Дата: 18.01.02 14:55
Оценка:
Здравствуйте sj, Вы писали:

sj>Подскажите оптимальный алгоритм сортировки по возрастанию

sj>двумерной матрицы по двум столбцам.

А тип данных какой?
Re[2]: Алгоритм сортировки двумерной матрицы
От: Аноним  
Дата: 19.01.02 15:14
Оценка:
L>А тип данных какой?

не думал что это имеет значение.
но если имеет, то объясню точнее

type TRecord = record
DateTime: TDateTime;
Point: Integer;
end;

var
a: array [0..n] of TRecord;

Вот это надо отсортировать по возрастанию.
Первично по DateTime, и вторично по Point.
Re[3]: Алгоритм сортировки двумерной матрицы
От: Хитрик Денис Россия RSDN
Дата: 19.01.02 19:51
Оценка:
Здравствуйте Аноним, Вы писали:

А>type TRecord = record
А> DateTime: TDateTime;
А> Point: Integer;
А>end;
А>var
А> a: array [0..n] of TRecord;

А>Вот это надо отсортировать по возрастанию.
А>Первично по DateTime, и вторично по Point.

Но это же не матрица! Здесь просто есть множество некоторых объектов, и есть правило, описывающее отношение между двумя любыми элементами (какой из двух должен стоять в отсортированной последовательности раньше другого). Собственно, нужно описать это правило, а потом применять уже алгоритм сортировки, в зависимости уже от числа n.
Так вот, функция, определяющая отношение должна иметь следующий вид (сортируем по возрастанию):

boolean function isBigger(a,b:TRecord) 
{ Если a должен стоять раньше b, то true. Иначе -- false. }
var res:boolean;
begin
  if (a.DateTime < b.DateTime) then res := true
  else if (a.DateTime > b.DateTime) then res := false
  else { теперь осталось обработать случай (a.DateTime = b.DateTime) }
    if (a.Point < b.Point) then res := true
    else res := false

  isBigger := res;
end;
{Это всё нужно проверить на предмет правильности ;) }


Вроде бы так, но при условии, что TDateTime можно так сравнивать. Если нет, то надо написать функцию, сравнивающую две даты между собой. Например она может выдавать
-1 в случае <
0 в случае =
1 в случае >
а потом использовать её в приведённом выше коде.

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

Удачи!
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.