cho số nguyên dương n(n<=250) và dãy a gồm n số nguyên dương a1, a2,..an, mỗi số đều k vượt quá 500. Sắp xếp dãy a thành dãy không giảm
giải thích dùm đoạn for j:=n downto 2 do trở xuống
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;
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
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
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á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
có lẻ dễ hiểu hơn rồi ,đa tạ bác
:v cả bác, mình mới học lớp 10 thôi à!!
0 thành viên, 0 khách, 0 thành viên ẩn danh