Đến nội dung

ngocnguyen

ngocnguyen

Đăng ký: 17-07-2014
Offline Đăng nhập: 20-07-2014 - 17:10
-----

Trong chủ đề: lập trình pascal: sắp xếp dãy số nguyên bằng thuật toán tráo đổi

18-07-2014 - 11:12



Cái bạn Hxthanh giải thích thế mình thấy chuẩn men rồi gì nữa, nếu bạn không hiểu, thì có thể sửa thuật toán lại thành :

 

For i:=1 to n-1 do

for j:=i+1 to n do

if a[i]>a[j] then

begin

t:=a[i];

a[i]:=a[j];

a[j]:=t;

end;

 

như thế là chạy sẻ dễ hiểu hơn rồi đó

có lẻ dễ hiểu hơn rồi ,đa tạ bác


Trong chủ đề: lập trình pascal: sắp xếp dãy số nguyên bằng thuật toán tráo đổi

18-07-2014 - 09:51

 

Thuật toán sắp xếp của bạn là kiểm tra và đổi chỗ 2 vị trí liền nhau nếu vị trí sau lớn hơn vị trí trước qua $n-1$ bước

Bước 1 kiểm tra và đổi chỗ $n-1$ cặp $(a_1, a_2);(a_2,a_3);..;(a_{n-1},a_n)$

Sau bước 1 thì $a_n$ là bé nhất

Bước 2 tương tự như vậy nhưng chỉ xét đến $a_{n-1}$

...

for j:=n downto 2 do        {Cái này lùi từ n về đến 2}
  for i:=1 to j-1 do        {Kiểm duyệt từ cặp 1 đến cặp j-1}
    if a[i]>a[i+1] then     {Phát hiện hai vị trí liên tiếp sắp xếp sai}
     begin
        t:=a[i];            {Lưu đệm}
        a[i]:=a[i+1];       {Cho a[i+1] lên vị trí a[i]} 
        a[i+1]:=t;          {Trả đệm vào vị trí a[i+1]}
     end;

bạn ơi, cái này là sắp xếp thành dãy tăng dần mà bạn, thì an phải lớn nhất chứ, mình vẫn chưa hiểu tại sao lại lùi từ n về 2 và kiểm duyệt từ 1 đến j-1