Помощь - Поиск - Пользователи - Календарь
Полная версия: Как сортировать массивы "of record"?
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
DarkWishmaster
Привет. Вопрос:
есть вектор 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
Цитата(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
Цитата(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, вот идиот...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.