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

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

Форум «Всё о Паскале» _ Теоретические вопросы _ Как сортировать массивы "of record"?

Автор: DarkWishmaster 3.04.2011 2:33

Привет. Вопрос:
есть вектор of record:

type MyType=record
x,y:integer;
end; //MyType
var a:array[1..255] of MyType;


Скажем я хочу отсортировать этот вектор так: a[i-1].y<=a[i].y<=a[i+1].y;
для этого можно:

for i:=1 to n-1 do
for j:=i+1 to n do
if a[i].y>a[j].y then begin
aux:=a[i].y; a[i].y:=a[j].y; a[j].y:=aux;
aux:=a[i].x; a[i].x:=a[j].x; a[j].x:=aux;
end;


А что если у меня полей не два, а 100? и я хочу его отсортировать, то мне надо писать 100 линий типа:
 aux:=x; x:=y; y:=aux; 

Или есть способ попроще?
Спасибо.

Автор: Lapp 3.04.2011 4:36

Цитата(DarkWishmaster @ 2.04.2011 23:33) *

Привет. Вопрос:
есть вектор of record:
type MyType=record
x,y:integer;
end; //MyType
var a:array[1..255] of MyType;


Скажем я хочу отсортировать этот вектор так: a[i-1].y<=a[i].y<=a[i+1].y;
для этого можно:

for i:=1 to n-1 do
for j:=i+1 to n do
if a[i].y>a[j].y then begin
aux:=a[i].y; a[i].y:=a[j].y; a[j].y:=aux;
aux:=a[i].x; a[i].x:=a[j].x; a[j].x:=aux;
end;


А что если у меня полей не два, а 100? и я хочу его отсортировать, то мне надо писать 100 линий типа:
 aux:=x; x:=y; y:=aux; 

Или есть способ попроще?
Спасибо.


type
MyType=record
x,y: integer;
end; //MyType

var
a: array[1..255] of MyType;
b: MyType;
.....
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i].y>a[j].y then begin
b:= a[i];
a[i]:= a[j];
a[j]:= b
end;

Автор: DarkWishmaster 3.04.2011 4:42

Цитата(Lapp @ 3.04.2011 0:36) *

type
MyType=record
x,y: integer;
end; //MyType

var
a: array[1..255] of MyType;
b: MyType;
.....
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i].y>a[j].y then begin
b:= a[i];
a[i]:= a[j];
a[j]:= b
end;



Спасибо! А я aux делал типа integer, вот идиот...