Professional Documents
Culture Documents
Bài tập ctdl
Bài tập ctdl
} M = {10,15,2,7,8};
int i, j; for 2:
for (i = 0; i < n - 1; i++)
(for2- lần 1)Khởi tạo j=n-1=4, kiểm tra j>i ⟺ 4>1➔đúng
{
If: M[j] <M[j-1]⟺ M[4]<M[3]
for (j = n - 1; j > i; j--)
{ ⟺ 8<7➔ sai, không đổi vị trí, danh sách vẫn là:
if (M[j] < M[j - 1])// nếu M = {2,10,15,7,8};
có nghịch thế
{ (for2- lần 2) j--➔j=4-1=3, kiểm tra j>i⟺ 3>1➔đúng
int temp = M[j]; (for2- lần 2) j--➔j=4-1=3, kiểm tra j>i ⟺ 3>2➔đúng
M[j] = M[j - 1]; If: M[j] <M[j-1]⟺ M[3]<M[2]
M[j - 1] = temp; ⟺ 8<10➔đúng, hoán đổi vị trí của hai phần tử này,
} ta có:
} M = {2,7,8,10,15};
} (for2- lần 3) j--➔j=3-1=2, kiểm tra j>i ⟺ 2>2➔sai➔ngừng
for 2
}
for 1:
(for1- lần 4)i++➔i=2+1=3, kiểm tra i<n-1⟺ i<5-1⟺
3<4➔đúng
for 2:
(for2- lần 1)Khởi tạo j=n-1=4, kiểm tra j>i ⟺ 4>3➔đúng
If: M[j] <M[j-1]⟺ M[4]<M[3]
⟺ 15<10➔ sai, không đổi vị trí, danh sách vẫn là:
M = {2,7,8,10,15};
Bài tập 1- slide trang 49: Hãy giải thích từng bước quá trình chạy Selection
Sort cho danh sách dưới đây:
int M[] = {10,15,2,8,7};
SelectionSort(M);
void SelectionSort(int M[], int n)
{
int min;
for(int i=0;i<n-1;i++)
{ int M[] = {10,15,2,8,7};
min = i; SelectionSort(M);
for(int j=i+1;j<n;j++) for 1:
{ (for1- lầ n 1)Khở i tạ o i=0, kiểm tra i<n-1
if (M[j] < ⟺i<5-1⟺ 0<4➔đú ng:
M[min]) min=i=0
min = j; for 2:
} (for2- lầ n 1)Khở i tạ o j=i+1=1, kiểm tra
if(min!=i) j<n ⟺ 1<5➔đú ng:
{ If: M[j] <M[min]⟺ M[1]<M[0]
int temp = M[ i]; ⟺ 15<10➔sai
M[ i] = M[min]; (for2- lầ n 2) j++➔j=2, kiểm tra j<n
M[min] = temp; ⟺ 2<5➔đú ng:
} If: M[j] <M[min]⟺ M[2]<M[0]
} ⟺ 2<10➔đú ng:
} Min=j=2
(for2- lầ n 3) j++➔j=3, kiểm tra j<n
⟺ 3<5➔đú ng:
If: M[j] <M[min]⟺ M[3]<M[2]
⟺ 8<2➔sai
(for2- lầ n 4) j++➔j=4, kiểm tra j<n
⟺ 4<5➔đú ng:
If: M[j] <M[min]⟺ M[4]<M[2]
⟺ 7<2➔sai
(for2- lầ n 5) j++➔j=5, kiểm tra j<n
⟺ 5<5➔sai➔kết thú c for 2
If: min != i⟺ 2!=0 ➔đú ng ➔
hoá n đổ i vị trí 0 và 2 ta đượ c:
M = {2,15,10,8,7};