You are on page 1of 6

Bài tập 1- slide trang 49: Hãy giải thích từng bước quá trình chạy

Bubble Sort cho danh sách dưới đây:


int[] M = {10,15,2,8,7};
BubbleSort(M);
void BubbleSort(int M[], int n) int[] M = {10,15,2,8,7};
{ BubbleSort(M);
for 1:
int i, j;
(for1- lần 1)Khởi tạo i=0, kiểm tra i<n-1 ⟺ i<5-1 ⟺
for (i = 0; i < n - 1; i++)
0<4➔đúng
{
for (j = n - 1; j > i; j--) for 2:
{ (for2- lần 1)Khởi tạo j=n-1=4, kiểm tra j>i ⟺ 4>0➔đúng
if (M[j] < M[j - 1])// nếu If: M[j] <M[j-1]⟺ M[4]<M[3]
có nghịch thế ⟺ 7<8➔đúng, hoán đổi vị trí của hai phần tử này, ta
{
có:
int temp = M[j];
M = {10,15,2,7,8};
M[j] = M[j - 1];
M[j - 1] = temp; (for2- lần 2) j--➔j=4-1=3, kiểm tra j>i ⟺ 3>0➔đúng
} If: M[j] <M[j-1]⟺ M[3]<M[2]
} ⟺ 7<2➔sai, không đổi vị trí, danh sách vẫn là:

} M = {10,15,2,7,8};

} (for2- lần 3) j--➔j=3-1=2, kiểm tra j>i ⟺ 2>0➔đúng


If: M[j] <M[j-1]⟺ M[2]<M[1]
⟺ 2<15➔đúng, hoán đổi vị trí của hai phần tử này,
ta có:
M = {10,2,15,7,8};

(for2- lần 4) j--➔j=2-1=1, kiểm tra j>i 1>0➔đúng

If: M[j] <M[j-1]M[1]<M[0]


⟺ 2<15➔đúng, hoán đổi vị trí của hai phần tử này,
ta có:
M = {2,10,15,7,8};

(for2- lần 5) j--➔j=1-1=0, kiểm tra j>i ⟺ 0>0➔sai➔ngừng


for 2
for 1:
(for1- lần 2)i++➔i=0+1=1, kiểm tra i<n-1 ⟺ i<5-1⟺
void BubbleSort(int M[], int n)
{ 1<4➔đúng

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]; If: M[j] <M[j-1]⟺ M[3]<M[2]


M[j] = M[j - 1]; ⟺ 7<15➔đúng, hoán đổi vị trí của hai phần tử này,
M[j - 1] = temp; ta có:
} M = {2,10,7,15,8};
} (for2- lần 3) j--➔j=3-1=2, kiểm tra j>i⟺ 2>1➔đúng
} If: M[j] <M[j-1]⟺ M[2]<M[1]
} ⟺ 7<15➔đúng, hoán đổi vị trí của hai phần tử này,
ta có:
M = {2,7,10,15,8};

(for2- lần 4) j--➔j=2-1=1, kiểm tra j>i ⟺ 1>1➔sai➔ngừng


for 2
void BubbleSort(int M[], int n) for 1:
{ (for1- lần 3)i++➔i=1+1=2, kiểm tra i<n-1 ⟺ i<5-1⟺
int i, j; 2<4➔đúng
for (i = 0; i < n - 1; i++) for 2:
{
(for2- lần 1)Khởi tạo j=n-1=4, kiểm tra j>i⟺ 4>2➔đúng
for (j = n - 1; j > i; j--)
If: M[j] <M[j-1]⟺ M[4]<M[3]
{
⟺ 8<15➔đúng, hoán đổi vị trí của hai phần tử này,
if (M[j] < M[j - 1])// nếu ta có:
có nghịch thế
{ M = {2,7,10,8,15};

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};

(for2- lần 2) j--➔j=4-1=3, kiểm tra j>i ⟺ 3>3➔sai➔ngừng


for 2
for 1:

(for1- lần 5)i++➔i=3+1=4, kiểm tra i<n-1⟺ i<5-1⟺ 4


<4➔sai
➔ngừng for 1
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};

void SelectionSort(int M[], int n) for 1:


{ (for1- lầ n 2) i++➔i=1, kiểm tra i<n-1
⟺ i<5-1⟺ 1<4➔đú ng:
int min;
for(int i=0;i<n-1;i++) min=i=1
{ for 2:
(for2- lầ n 1)Khở i tạ o j=i+1=2, kiểm tra
min = i; j<n ⟺ 2<5➔đú ng:
for(int j=i+1;j<n;j++) If: M[j] <M[min]⟺ M[2]<M[1]
{
⟺ 10<15➔đú ng:
if (M[j] <
M[min]) min=j=2
min = j; (for2- lầ n 2) j++➔j=3, kiểm tra j<n
} ⟺ 3<5➔đú ng:
if(min!=i)
If: M[j] <M[min]⟺ M[3]<M[2]
{
⟺ 8<10➔đú ng
int temp = M[ i];
M[ i] = M[min]; min=j=3
M[min] = temp; (for2- lầ n 3) j++➔j=4, kiểm tra j<n
⟺ 4<5➔đú ng:
}
If: M[j] <M[min]⟺ M[4]<M[3]
}
⟺ 7<8➔đú ng:
}
Min=j=4
(for2- lầ n 4) j++➔j=5, kiểm tra j<n
⟺ 5<5➔sai➔kết thú c for 2
If: min != i⟺ 4!=1 ➔đú ng

➔ hoá n đổ i vị trí 1 và 4 ta đượ c:


M = {2,7,10,8,15};
for 1:
(for1 - lầ n 3) i++➔i=2, kiểm tra i<n-1
⟺ i<5-1⟺ 2<4➔đú ng:
min=i=2
for 2:
(for2- lầ n 1)Khở i tạ o j=i+1=3, kiểm
tra
j<n ⟺ 3<5➔đú ng:
If: M[j] <M[min]⟺ M[3]<M[2]
⟺ 8<10➔đú ng:
min=j=3
(for2- lầ n 2) j++➔j=4, kiểm tra j<n ⟺ 4<5➔đú ng:
void SelectionSort(int M[], int n) If: M[j] <M[min]⟺ M[4]<M[3]
{ ⟺ 15<8➔sai
int min;
(for2- lầ n 3) j++➔j=5, kiểm tra j<n
for(int i=0;i<n-1;i++)
{ ⟺ 5<5➔sai➔dừ ng for 2

min = i; If: min != I ⟺ 3!=2 ➔ đú ng ➔


for(int j=i+1;j<n;j++) hoá n đổ i vị trí 3 và 2 ta đượ c:
{ M = {2,7,8,10,15};
if (M[j] <
for 1:
M[min])
min = j; (for1 - lầ n 4) i++➔i=3, kiểm tra i<n-1
} 3<5-1⟺ 3<4➔đú ng:
if(min!=i) min=i=3
{ for 2:
int temp = M[ i]; (for2- lầ n 1)Khở i tạ o j=i+1=4, kiểm tra
j<n ⟺ 4<5➔đú ng:
M[ i] = M[min];
If: M[j] <M[min]⟺ M[4]<M[3]
M[min] = temp;
⟺ 15<10➔sai
} (for2- lầ n 2) j++➔j=5, kiểm tra j<n
} ⟺ 5<5➔sai➔dừ ng for 2
If: min != i⟺ 3!=3 ➔ sai ➔ giữ
}
nguyên mả ng cũ vì khô ng đổ i gì:
M = {2,7,8,10,15};
for 1:
(for1 - lầ n 5) i++ ➔ i=4,
kiểm tra i < M.Length-1 ⟺ 4<5-1
⟺ 4<4➔sai➔dừ ng for 1

Kết thú c giả i thuậ t ta có :


M = {2,7,8,10,15};

You might also like