You are on page 1of 20

1.

Cho các mảng số nguyên sau, hãy chạy tay từng dãy số:
12 04 44 11 30 05

a)Insertion sort:
B1:
current = 1, walker = 0, hold = 04
04<12: swap (04,12)
04 12 44 11 30 05

B2:
curr = 2, w = 1, h = 44
44>12: no swap
04 12 44 11 30 05

B3:
curr = 3, w = 2, h = 11
11<44: swap (11,44)
04 12 11 44 30 05
curr = 3, w = 1, h = 11
11<12: swap (11,12)
04 11 12 44 30 05
Curr = 3, w = 0, h = 11
11>04: no swap

B4:
curr = 4, w = 3, h = 30
30<44: swap (30,44)
04 11 12 30 44 05
curr = 4, w = 2, h = 30
30>11: no swap

B5:
curr = 5, w = 4, h = 05
05<44: swap (05,44)
04 11 12 30 05 44
curr = 5, w = 3, h = 05
05<30: swap(05,30)
04 11 12 05 30 44
curr = 5, w = 2, h = 05
05<12: swap(05,12)
04 11 05 12 30 44
curr = 5, w = 1, h = 05
05<11: swap(05,11)
04 05 11 12 30 44
curr = 5, w = 0, h = 05
05>04: no swap
End insertion swap

b) Selection Sort
12 04 44 11 30 05
B1:
curr = 0, w = 1, smallest=12
w=1->5: min = 04
04<12: exchange(04,12)
04 12 44 11 30 05

B2:
curr = 1, w = 2, smallest=12
w=2->5: min = 05
05<12: exchange(05,12)
04 05 44 11 30 12

B3:
curr = 2, w = 3, smallest=44
w=3->5: min = 11
11<44: exchange(11,44)
04 05 11 44 30 12

B4:
curr = 3, w = 4, smallest=44
w=4->5: min = 12
12<44: exchange(12,44)
04 05 11 12 30 44
B5:
curr = 4, w = 5, smallest=30
min = 44
44>30: no exchange
04 05 11 12 30 44

B6:
curr = 5, smallest=44
no exchange
End selection sort.
04 05 11 12 30 44

c) Bubble Sort
12 04 44 11 30 05

Pass 1: Pass 2: Pass 3:


c=0, w=5, s=T c=1, w=5, s=T c=2, w=5, s=T
B1: c=0, w=1 B1: c=0, w=1 B1: c=0, w=1
04<12: swap(04,12)=>s=F 12>04: no swap 11>04: no swap
1 3 B2: c=1,w=2 B2: c=1, w=2
04 44 11 05
2 0
11<12: swap(11,12)=>s=F 12>11: no swap
c=0, w=0, s=F 1 0 B3: c=2, w=3
04 12 30 44
B2: c=1, w=2 1 5
05<12:swap (05,12)=>s=F
44>12: no swap 1 3
B3: c=2, w=3 04 05 12 44
1 0
B3: c=2,w=3 30>12: no swap
11<44: swap(11,44) =>s=F B4: c=3, w=4 B4: c=3, w=4
04 12 11 44 30 05 05<30:swap (05,30)=>s=F 30>12: no swap
1 3 B5: c=4,w=5
04 12 05 44
1 0
B4: c=3,w=4 44>30: no swap

30<44: swap(30,44)=>s=F B5: c=4, w=5 B6: c=5, w=5

1 4 44>30: no swap No swap


04 11 30 05
2 4 B6: c=5, w=5

B5: c=4, w=5 No swap

05<44: swap(05,44)=>s=F
1 0
04 11 30 44
2 5

B6: c=5, w=5


No swap
Pass 4: Pass 5:
c=3, w=5, s=T c=4, w=5, s=T
B1: c=0, w=1 No swap
11>04: no swap End bubble sort.
B2: c=1, w=2
05<11:swap(05,11)=>s=F

0 3
04 11 12 44
5 0

B3: c=2, w=3


12>11: no swap
B4: c=3, w=4
30>12: no swap
B5: c=4, w=5
44>30: no swap
B6: c=5, w=5
no swap

d) Merger Sort

8 41 03 01 09 15

a) Insertion sort
B1
Current = 1, walker = 0, hold = 41
8 < 41: no swap
8 41 03 01 09 15

B2
Current = 2, walker = 1, hold = 03
03 < 41: swap = (03, 41)
8 03 41 01 09 15

Current = 2, walker = 0, hold = 03


03 < 8; swap = (03, 8)
03 8 41 01 09 15
B3
Current = 3, walker = 2, hold = 01
01 < 41: swap = (01, 41)
03 8 01 41 09 15

Current = 3, walker = 1, hold = 01


01 < 8: swap = (01, 8)
03 01 8 41 09 15

Current = 3, walker = 0, hold = 01


01 < 03: swap = (01, 03)

01 03 8 41 09 15

B4:
Current = 4, walker = 3, hold = 09
09 < 41: swap = (09, 41)
01 03 8 09 41 15
Current = 4, walker = 2, hold = 09
09 > 8: no swap
01 03 8 09 41 15
Current = 4, walker = 1, hold = 09
09 > 03: no swap
01 03 8 09 41 15
Current = 4, walker = 0, hold = 09
09 > 03: no swap
01 03 8 09 41 15
B5
Current = 5, walker = 4, hold = 15
15 < 41: swap = (15, 41)
01 03 8 09 15 41

Current = 5, walker = 3, hold = 15


15 > 09: no swap
01 03 8 09 15 41

Current = 5, walker = 2, hold = 15


15 > 8: no swap
01 03 8 09 15 41

Current = 5, walker = 1, hold = 15


15 > 03: no swap
01 03 8 09 15 41

Current = 5, walker = 0, hold = 15


15 > 01: no swap
01 03 8 09 15 41

End insertion sort


b) Selection sort

8 41 03 01 09 15

B1:
Current = 0, walker = 1, smallest = 8
Walker 1 -> 5: min = 01
01 < 8
Exchange = (8, 01)
01 41 03 8 09 15

B2:
Current = 1, walker = 2, smallest = 41
Walker 2 -> 5, min = 03
03 < 41
Exchange = (03, 41)
01 03 41 8 09 15

B3:
Current = 2, walker = 3, smallest = 41
Walker 3 -> 5, min = 8
8 < 41
Exchange = (8, 41)
01 03 8 41 09 15
B4:
Current = 3, walker = 4, smallest = 41
Walker 4 -> 5, min = 09
41 < 09
Exchange = (09, 41)
01 03 8 09 41 15

B5:
Current = 4, smallest = 41, walker = 5
Walker = 5, min = 15
15 < 41
Exchange = (15, 41)
01 03 8 09 15 41

B6:
Current = 5, smallest = 41
No exchange
01 03 8 09 15 41

End selection sort

c) Bubble Sort

8 41 03 01 09 15
PASS 1 PASS 2 PASS 3
c = 0, w = 5, s = T C = 1, w = 5, s = T C = 2, w = 5, s = T

09 < 15: no swap 09 < 15: no swap 09 < 15: no swap


8 41 0 01 09 15 01 8 41 03 0 15 01 0 8 41 0 15
3 9 3 9

c = 0, w = 4 C = 1, w = 4 C = 2, w = 4
01 < 09: no swap 03 < 09: no swap 41 > 09: swap = (09, 41)
8 41 0 01 09 15 01 8 41 03 0 15  S=F
3 9
01 0 8 09 4 15
3 1
C = 0, w = 3 C = 1, w = 3
03 > 01: swap = (01, 03) 41 > 03: swap = (41, 03) C = 2, w = 3
 S=F  S=F 8 < 09: no swap
8 41 0 03 09 15 01 8 03 41 0 15 01 0 8 09 4 15
1 9 3 1

C = 0, w = 2 C = 1, w = 2 C = 2, w = 2, S = F
41 > 01: swap = (15, 01) 8 > 03: swap = (8, 03)
 S=F  S=F
8 01 4 03 09 15 01 0 8 41 0 15
1 3 9

C = 0, w = 1 C = 1, w = 1, S = F
8 > 01: swap = (01, 8)
 S=F
0 8 4 03 09 15
1 1

C = 0, w = 0, s = F

PASS 4 PASS 5 PASS 6


C = 3, w = 5 C = 4, w = 5, s = T C = 5, w = 5, s = T
41 > 15: swap = (41, 15) 15 < 41: no swap No swap
 S=F 01 0 8 09 1 41 End Bubble sort
3 5
0 03 8 09 15 41
1
C = 4, w = 4, s = F
C = 3, w = 4
09 < 41: no swap
0 03 8 09 15 41
1

C = 3, w = 3, s = F

d) Merger sort

7 2 1 18 10 4

a) Insertion sort
B1:
Current = 1, walker = 0, hold = 2
7 > 2: swap = (7, 2)
2 7 1 18 10 4

B2:
current = 2, walker = 1, hold = 7
7 > 1: swap = (7, 1)
2 1 7 18 10 4

Current = 2, walker = 0, hold = 1


2 > 1: swap = (1, 2)
1 2 7 18 10 4

B3:
Current = 3, walker = 2, hold = 18
7 < 18: no swap
1 2 7 18 10 4

Current = 3, walker = 1, hold = 18


2 < 18: no swap
1 2 7 18 10 4

Current = 3, walker = 0, hold = 18


1 < 18: no swap
1 2 7 18 10 4

B4:
Current = 4, walker = 3, hold = 10
18 > 10: swap = (18, 10)
1 2 7 10 18 4

Current = 4, walker = 2, hold = 10


7 < 10: no swap
1 2 7 10 18 4

Current = 4, walker = 1, hold = 10


2 < 10: no swap
1 2 7 10 18 4

Current = 4, walker = 0, hold = 10


1 < 18: no swap
1 2 7 10 18 4

B5:
Current = 5, walker = 4, hold = 4
18 > 4: swap = (18, 4)
1 2 7 10 4 18

Current = 5, walker = 3, hold = 4


10 > 4: swap = (4, 10)
1 2 7 4 10 18

Current = 5, walker = 2, hold = 4


7 > 4: swap = (7, 4)
1 2 4 7 10 18

Current = 5, walker = 1, hold = 4


2 < 4: no swap
1 2 4 7 10 18

Current = 5, walker = 0, hold = 4


1 < 4: no swap
1 2 4 7 10 18

End insertion sort

b) Selection sort
7 2 1 18 10 4

B1:
Current = 0, walker = 1, smallest = 7
W = 1 -> 5: min = 1
1 < 7: exchange = (1, 7)
1 2 7 18 10 4

B2:
Current = 1, walker = 2, smallest = 2
W = 2 -> 5: min: 4
2 < 4: no exchange
1 2 7 18 10 4

B3:
Current = 2, walker = 3, smallest = 7
W = 3 -> 5, min = 4
7 > 4: exchange = (4, 7)
1 2 4 18 10 7

B4:
Current = 3, walker = 4, smallest = 18
W = 4 -> 5, min = 7
18 > 7: exchange = (18, 7)
1 2 4 7 10 18

B5:
Current = 4, smallest = 10

1 2 4 7 10 18
End Selection sort
c) Bubble sort
7 2 1 18 10 4

PASS 1 PASS 2 PASS 3


c = 0, w = 5 C = 1, w = 5 C = 2, w = 5, s = T
10 > 4: swap = (4, 10) 18 > 10: swap = (10, 18) 10 < 18: no swap
 S=F  S=F
7 2 1 1 4 10 1 7 2 4 1 18 1 2 7 4 1 18
8 0 0

C = 0, w = 4 C = 1, w = 4, s = T C = 2, w = 4, s = T
18 > 4: swap = (18, 4) 4 < 10: no swap 4 < 10: no swap
 S=F 1 7 2 4 1 18 1 2 7 4 1 18
0 0
7 2 1 4 18 10

C = 1, w = 3, s = T C = 2, w = 3
C = 0, w = 3, s = T
2 < 4: no swap 7 > 4: swap = (4, 7)
1 < 4: no swap
1 7 2 4 1 18  S=F
7 2 1 4 18 10
0
1 2 4 7 1 18
0
C = 0, w = 2, s = T
C = 1, w = 2
2 > 1: swap = (1, 2)
7 > 2: swap = (7, 2) C = 2, w = 2, s = T
7 1 2 4 18 10
 S=F
1 2 7 4 1 18
C = 0, w = 1, 0
7 > 1: swap = (7, 1)
 S=F C = 1, w = 1, S = T
1 7 2 4 18 10

C = 0, w = 0, S = T

PASS 4 PASS 5 PASS 6


C = 3, w = 5, S = T C = 4, w = 5, s = T C = 5, w = 5, s = T
10 < 18: no swap 10 < 18: no swap No swap
1 2 4 7 10 18 1 2 4 7 1 18 End Bubble sort
0

C = 3, w = 4, S = T
C = 4, w = 4, s = T
7 < 10: no swap
1 2 4 7 10 18

C = 3, w = 3, S = T

d) Merger sort
2. Hãy so sánh ưu/khuyết điểm/độ phức tạp của các thuật toán: InsertionSort,
SelectionSort, BubbleSort, MergerSort.
a) Insertion Sort:
Ưu điểm:
-Đơn giản và dễ hiểu.
-Hiệu quả với các mảng nhỏ hoặc đã gần được sắp xếp.
-Không cần bộ nhớ phụ.
Khuyết điểm:
-Độ phức tạp thời gian trung bình và xấu nhất là O(n^2), với n là kích thước
của mảng.
-Không hiệu quả với các mảng lớn hoặc đã được sắp xếp ngược.
b)Selection Sort:
Ưu điểm:
-Đơn giản và dễ hiểu.
-Tối ưu trong trường hợp số lượng phép trao đổi dữ liệu ít quan trọng.
Khuyết điểm:
-Độ phức tạp thời gian trung bình và xấu nhất là O(n^2), với n là kích thước
của mảng.
-Không hiệu quả với các mảng lớn hoặc đã được sắp xếp ngược.
-Không ổn định, tức là có thể thay đổi thứ tự của các phần tử bằng giá trị
bằng nhau.
c)Bubble Sort:
Ưu điểm:
-Đơn giản và dễ hiểu.
-Hiệu quả với các mảng nhỏ hoặc đã gần được sắp xếp.
Khuyết điểm:
-Độ phức tạp thời gian trung bình và xấu nhất là O(n^2), với n là kích thước
của mảng.
-Không hiệu quả với các mảng lớn hoặc đã được sắp xếp ngược.
d)Merge Sort:
Ưu điểm:
-Độ phức tạp thời gian trung bình và xấu nhất là O(n log n), với n là kích
thước của mảng.
-Ổn định, tức là không thay đổi thứ tự của các phần tử bằng nhau.
-Hiệu quả với các mảng lớn và có thể sử dụng song song để tăng tốc độ.
Khuyết điểm:
-Đòi hỏi bộ nhớ phụ để lưu trữ các mảng tạm thời trong quá trình trộn.
-Độ phức tạp không gian là O(n) do sử dụng bộ nhớ phụ.
Tổng kết:
Insertion Sort và Selection Sort đơn giản và dễ hiểu, nhưng có độ phức tạp thời
gian cao và không hiệu quả cho các mảng lớn hoặc đã được sắp xếp ngược.
Bubble Sort cũng đơn giản, nhưng không hiệu quả và chỉ phù hợp với các mảng
nhỏ hoặc đã gần được sắp xếp.
Merge Sort có độ phức tạp thời gian tốt nhất và hiệu quả cho các mảng lớn, nhưng
đòi hỏi sử dụng bộ nhớ phụ và có độ phức tạp không gian cao.

You might also like