Đoạn chương trình sau giải bài toán gì? For j:=n downto 2 do For i:=1 to j – 1 do If a[i] <= a[i+i] then Begin T:=a[i]; A[i]:=a[i+1]; A[i+1]:=t; End; A. Sắp xếp dãy a thành dãy không tăng B. Sắp xếp dãy a thành dãy không giảm C. Sắp xếp dãy a thành dãy tăng D. Sắp xếp dãy a thành dãy giảm Giải chi tiét với giải thích hộ mình ạ
2 câu trả lời
Đoạn chương trình này sử dụng thuật toán sắp xếp nổi bọt (bubble sort) để sắp xếp một dãy số a thành dãy tăng dần.
Các vòng lặp for được sử dụng để duyệt qua các phần tử của dãy số a. Trong mỗi lần duyệt, nếu giá trị của phần tử a[i] lớn hơn giá trị của phần tử a[i+1] thì hai phần tử này sẽ được hoán vị cho nhau.
Thuật toán sắp xếp nổi bọt sắp xếp các phần tử trong dãy theo thứ tự tăng dần. Các phần tử có giá trị lớn hơn sẽ dần dần "lên trên", tức là di chuyển về đầu dãy, trong khi các phần tử có giá trị nhỏ hơn sẽ dần dần "đi xuống", tức là di chuyển về cuối dãy. Khi một phần tử đã "lên trên" hoặc "đi xuống" tới đúng vị trí của nó, thì thuật toán sẽ không còn hoán vị nó nữa.
Vậy kết quả của đoạn chương trình là sắp xếp dãy số a thành dãy tăng dần. Do đó, đáp án là C: Sắp xếp dãy a thành dãy tăng.
For j:=n downto 2 do
For i:=1 to j – 1 do
If a[i] <= a[i+i] then
Begin
T:=a[i];
A[i]:=a[i+1];
A[i+1]:=t;
End;
* * * * * ** * ** * ** * ** * ** * ** * ** * *
vd :
* n = 3;
* a1 = 8;
* a2 = 4;
* a3 = 6
- for j := n downto 2 to ⇔ for j := 3 downto 2 to ⇔ giá trị của j chạy từ 3 giảm về 2
- for i := 1 to j - 1 do ⇔ for i := 1 to 3 - 1 do ⇔ for i := 1 to 2 do ⇔ giá trị của i từ 1 tăng đến 2
- nếu a[i] <= a[i + i] đúng thì thực thi câu lệnh ghép begin ... end;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Với i = 1
⇔ a[i] <= a[i + i]
⇔ a[1] <= a[1 + 1]
⇔ a[1] <= a[2]
⇔ 8 <= 4 => điều này sai => không thực thi câu lệnh ghép
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Với i = 2
⇔ a[i] <= a[i + i]
⇔ a2 <= a[3]
⇔ 4 <= 6 => điều này đúng => thực thi câu lệnh ghép
t := a[2] ⇔ t := 4
a[i] := a[i + 1] ⇔ a[2] := a[3] ⇔ a[2] := 6
a[i + 1] := t ⇔ a[3] := t ⇔ (mà t := 4) ⇔ a[3] = 4
=> giá trị a[2] và a[3] đã hoán đổi a[2] = 6, a[3] = 4
* * * * * * * * * * * * * * * * * * * * * * * * * * *
=> dãy sắp xếp lần lượt là : 8 6 4
=> khi gặp phần tử trước bé hơn phần tử sau chúng sẽ hoán đổi cho nhau
A. Sắp xếp dãy a thành dãy không tăng
B. Sắp xếp dãy a thành dãy không giảm
C. Sắp xếp dãy a thành dãy tăng
D. Sắp xếp dãy a thành dãy giảm