PDA

View Full Version : Sắp xếp mảng



minhhuu
21-04-2003, 08:17
Có ai giỏi về sắp xếp mảng hai chiều như sắp xếp thành đường "zíchzắc", sắp xếp theo chiều vòng, sắp xếp nhiwều kiểu nữa .... thì chỉ giùm nha. Mình biết nhưng phải tìm công thức mệt quá

Nicky
22-04-2003, 20:02
Mấy cái đó trong sách về Pascal có nhiều lắm.

minhhuu
24-04-2003, 09:11
Bạn làm ơn chỉ cụ thể là sách nào

real_time
27-04-2003, 09:29
Mình chưa tìm ra sách nào viết cả? Nhưng mình có phương pháp thế này bạn xem có được ko nhé?
Đầu tiên bạn sắp xếp thứ tự tăng dần hoặc giảm dần trên toàn mảng 2 chiều đó đi
Bước tiếp theo là các hàng chẵn bạn sẽ đổi ngược lại cho nhau. Thế là được đươc thôi mà! chúc bạn thành công.

minhhuu
01-05-2003, 07:45
Mình có làm bài này rồi nhưng phải có công thức rắc rối quá. Còn làm như cách của bạn thì bị tràn số

Shinichi Heroine
01-05-2003, 20:51
Bạn khai báo thế nào mà bị tràn ?

monkeyvu
05-05-2003, 07:56
He he ,mấy bài này chỉ có cách là tìm công thức thôi bạn ơi!!!!

I_Love_Tra
05-05-2003, 09:25
Bạn muốn sắp xếp mảng 2 chiều theo các đường ziczac, nhiểu vòng thì thử tìm quyển: Những đề thi học sinh giỏi cấp quốc gia năm 2000, Những bài toán Pascal nâng cao thử xem. Hình như có đấy. Mình nhớ mang mang la như vậy
===================================
Sun for day
Moon for Night
Gun for War
Rose for Love
.... And you for me

minhhuu
07-05-2003, 06:19
Chúng ta hãy tìm cách sắp xếp mà không cần công thức đi, Ai có bài trước thì đưa lên nha.

btkiet
07-05-2003, 09:29
Mấy bài này dễ ợt, đầu tiên bạn chuyển từ mảng 2 chiều sang 1 chiều, sắp xếp mảng 1 chiều theo thứ tự tăng dần, sau đó chuyển từ mảng 1 chiều sang mảng 2 chiều.
Quan trọng và khó nhất là chổ chuyển từ mảng 1 chiều sang mảng 2 chiều theo thứ tự sao cho đúng với hình ziczac hay xoắn ốc thôi, điều này được thực hiện với vòng lặp kết hợp if then là được, không cần tìm công thức đâu.
Để tôi tìm lại source rồi post lên sau, lâu quá nên không biết đâu rồi.

btkiet
07-05-2003, 16:05
Source đây.

uses crt;
const max=50;
type mang1=array[1..max*max] of word;
mang2=array[1..max,1..max] of word;
var a:mang2;b:mang1;
n:byte;

procedure taomang;
var i,j:byte;k:word;
begin
clrscr;
randomize;
write(' Nhap n= ');readln(n);
k:=1;
for i:=1 to n do
for j:=1 to n do
begin
a[i,j]:=random(1000);
b[k]:=a[i,j];
inc(k);
end;
end;

procedure xuat;
var i,j:byte;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
readln;
end;

procedure qs(l,r:byte);
var i,j:byte;x,t:word;
begin
i:=l;j:=r;
x:=b[(i+j) div 2];
repeat
while b[i]<x do inc(i);
while b[j]>x do dec(j);
if i<=j then
begin
t:=b[i]; b[i]:=b[j]; b[j]:=t;
inc(i); dec(j);
end;
until i>j;
if i<r then qs(i,r);
if j>l then qs(l,j);
end;

procedure bt;
var i,j:byte;t:word;
begin
t:=1;
for i:=1 to n do
for j:=1 to n do
begin
a[i,j]:=b[t];
inc(t);
end;
end;

procedure ziczac_h;
var i,j:byte;t:word;
begin
t:=1;
for i:=1 to n do
for j:=1 to n do
begin
if odd(i) then a[i,j]:=b[t]
else a[i,n-j+1]:=b[t];
inc(t);
end;
end;

procedure ziczac_c;
var i,j:byte;t:word;
begin
t:=1;
for j:=1 to n do
for i:=1 to n do
begin
if odd(j) then a[i,j]:=b[t]
else a[n-i+1,j]:=b[t];
inc(t);
end;
end;

procedure ziczac_d;
var k,t:word;
i,j,m,h:byte;
begin
h:=0;t:=0;
for i:=2 to 2*n do
begin
if i>n then
begin
k:=i-n;
m:=n;
end
else begin
k:=1;
m:=i-1;
end;
case h of
0: begin
for j:=k to m do
begin
inc(t);
a[i-j,j]:=b[t];
end;
h:=1;
end;
1: begin
for j:=m downto k do
begin
inc(t);
a[i-j,j]:=b[t];
end;
h:=0;
end;
end;
end;
end;

procedure xoan_x;
var c1,c2,h1,h2,i:byte;t:word;
begin
t:=0;
c1:=1;c2:=n;
h1:=2;h2:=n;
repeat
for i:=c1 to c2 do
begin
inc(t);
a[h1-1,i]:=b[t];
end;
dec(c2);
for i:=h1 to h2 do
begin
inc(t);
a[i,c2+1]:=b[t];
end;
dec(h2);
for i:=c2 downto c1 do
begin
inc(t);
a[h2+1,i]:=b[t];
end;
inc(c1);
for i:=h2 downto h1 do
begin
inc(t);
a[i,c1-1]:=b[t];
end;
inc(h1);
until t>=n*n;
end;

procedure xoan_n;
var c1,c2,h1,h2,i:byte;t:word;
begin
t:=0;
c1:=1;c2:=n;
h1:=2;h2:=n;
repeat
for i:=c2 downto c1 do
begin
inc(t);
a[h1-1,i]:=b[t];
end;
inc(c1);
for i:=h1 to h2 do
begin
inc(t);
a[i,c1-1]:=b[t];
end;
dec(h2);
for i:=c1 to c2 do
begin
inc(t);
a[h2+1,i]:=b[t];
end;
dec(c2);
for i:=h2 downto h1 do
begin
inc(t);
a[i,c2+1]:=b[t];
end;
inc(h1);
until t>=n*n;
end;

BEGIN
clrscr;
taomang;xuat;
qs(1,n*n);
bt;xuat;
ziczac_h;xuat;
ziczac_c;xuat;
ziczac_d;xuat;
xoan_x;xuat;
xoan_n;xuat;
END.

minhhuu
12-05-2003, 06:52
Xin cam on nhieu, rat nho on ban. Tim duoc bai nay mung qua