Professional Documents
Culture Documents
CTDL&GT
CTDL&GT
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
05<44: swap(05,44)=>s=F
1 0
04 11 30 44
2 5
0 3
04 11 12 44
5 0
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
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
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
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
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
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
B3:
Current = 3, walker = 2, hold = 18
7 < 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
B5:
Current = 5, walker = 4, hold = 4
18 > 4: swap = (18, 4)
1 2 7 10 4 18
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
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
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.