Professional Documents
Culture Documents
Goi y On Tap Cac Thuat Toan Sap Xep
Goi y On Tap Cac Thuat Toan Sap Xep
8 swap(a[max_idx], a[i]);
9 }
10 }
Hình 1. Hàm sắp xếp mảng một chiều giảm dần với thuật toán Selection Sort bằng ngôn ngữ C++.
Yêu cầu: Bạn hãy chạy từng bước thuật toán Selection Sort để sắp xếp mảng một chiều gồm các phần tử 3,
6, 8, 9, 7, 10 giảm dần. Thuật toán Selection Sort đã được trình bày sẵn trong Hình 1. Cụ thể, bạn hãy điền
lời giải vào Bảng 1.
a[]
Bước Chú thích
0 1 2 3 4 5
3 6 8 9 7 10
max_idx ← 5;
1 10 6 8 9 7 3
swap(a[5], a[0]);
max_idx ← 3;
2 10 9 8 6 7 3
swap(a[3], a[1]);
max_idx ← 2;
3 10 9 8 6 7 3
swap(a[2], a[2]);
max_idx ← 4;
4 10 9 8 7 6 3
swap(a[4], a[3]);
max_idx ← 4;
5 10 9 8 7 6 3
swap(a[4], a[4]);
Bảng 1. Bảng chạy từng bước thuật toán Selection Sort. Trong đó, dấu gạch chân mỗi phần tử của mảng chỉ
thị rằng phần tử đó đã được sắp xếp và sẽ không thay đổi vị trí trong các bước sắp xếp sau nữa.
Trang 1 / 7
Câu 2. Chạy từng bước thuật toán Insertion Sort
Hình 2. Hàm sắp xếp mảng một chiều giảm dần với thuật toán Insertion Sort bằng ngôn ngữ C++.
Yêu cầu: Bạn hãy chạy từng bước thuật toán Insertion Sort để sắp xếp mảng một chiều gồm các phần tử 5, 1,
10, 9, 7, 2 giảm dần. Thuật toán Insertion Sort đã được trình bày sẵn trong Hình 2. Cụ thể, bạn hãy điền lời
giải vào Bảng 2.
a[]
Bước Chú thích
0 1 2 3 4 5
5 1 10 9 7 2
element_to_insert ← 1;
1 5 1 10 9 7 2
idx_to_insert ← 1;
element_to_insert ← 10;
2 10 5 1 9 7 2
idx_to_insert ← 0;
element_to_insert ← 9;
3 10 9 5 1 7 2
idx_to_insert ← 1;
element_to_insert ← 7;
4 10 9 7 5 1 2
idx_to_insert ← 2;
element_to_insert ← 2;
5 10 9 7 5 2 1
idx_to_insert ← 4;
Bảng 2. Bảng chạy từng bước thuật toán Insertion Sort. Trong đó, dấu gạch chân mỗi phần tử của mảng chỉ
thị rằng phần tử đó đã được sắp xếp và sẽ không thay đổi vị trí trong các bước sắp xếp sau nữa.
Trang 2 / 7
Câu 3. Chạy từng bước thuật toán Merge Sort
Hình 3. Hàm sắp xếp mảng một chiều giảm dần với thuật toán Merge Sort bằng ngôn ngữ C++.
Yêu cầu: Bạn hãy chạy từng bước thuật toán Merge Sort để sắp xếp mảng một chiều gồm các phần tử 7, 8, 9,
10, 3, 6 giảm dần. Thuật toán Merge Sort đã được trình bày sẵn trong Hình 3. Cụ thể, bạn hãy điền lời giải
vào Bảng 3.
a[]
Bước Chú thích
0 1 2 3 4 5
7 8 9 10 3 6
1 _merge_sort(a, 0, 5)
2 _merge_sort(a, 0, 2)
3 _merge_sort(a, 0, 1)
4 return 8 7 9 10 3 6
5 return 9 8 7 10 3 6
6 _merge_sort(a, 3, 5)
7 _merge_sort(a, 3, 4)
8 return 9 8 7 10 3 6
9 return 9 8 7 10 6 3
10 return 10 9 8 7 6 3
Bảng 3. Bảng chạy từng bước thuật toán Merge Sort. Trong đó, dấu gạch chân mỗi phần tử của mảng chỉ thị
rằng phần tử đó đã được sắp xếp và sẽ không thay đổi vị trí trong các bước sắp xếp sau nữa.
Trang 3 / 7
Câu 4. Chạy từng bước thuật toán Quick Sort
9 swap(a[low], a[pivot_idx]);
10 return pivot_idx;
11 }
12
Hình 4. Hàm sắp xếp mảng một chiều giảm dần với thuật toán Quick Sort bằng ngôn ngữ C++.
Yêu cầu: Bạn hãy chạy từng bước thuật toán Quick Sort để sắp xếp mảng một chiều gồm các phần tử 7, 8, 9,
10, 3, 6 giảm dần. Thuật toán Quick Sort đã được trình bày sẵn trong Hình 4. Cụ thể, bạn hãy điền lời giải
vào Bảng 4.
Trang 4 / 7
a[]
Bước Chú thích
0 1 2 3 4 5
7 8 9 10 3 6
1 _quick_sort(a, 0, 5)
2 _partition(a, 0, 5)
3 return 3 10 8 9 7 3 6
4 _quick_sort(a, 0, 2)
5 _partition(a, 0, 2)
6 return 0 10 8 9 7 3 6
7 _quick_sort(a, 1, 2)
8 _partition(a, 1, 2)
9 return 2 10 9 8 7 3 6
10 return
11 return
12 _quick_sort(a, 4, 5)
13 _partition(a, 4, 5)
14 return 5 10 9 8 7 6 3
15 return
16 return
Bảng 4. Bảng chạy từng bước thuật toán Quick Sort. Trong đó, dấu gạch chân mỗi phần tử của mảng chỉ thị
rằng phần tử đó đã được sắp xếp và sẽ không thay đổi vị trí trong các bước sắp xếp sau nữa.
Trang 5 / 7
Câu 5. Chạy từng bước thuật toán Heap Sort
Hình 5. Hàm sắp xếp mảng một chiều giảm dần với thuật toán Heap Sort bằng ngôn ngữ C++.
Yêu cầu: Bạn hãy chạy từng bước thuật toán Heap Sort để sắp xếp mảng một chiều gồm các phần tử 7, 8, 9,
10, 3, 6 giảm dần. Thuật toán Heap Sort đã được trình bày sẵn trong Hình 5. Cụ thể, bạn hãy điền lời giải vào
Bảng 5.
Trang 6 / 7
a[] Cây
Bước Chú thích
0 1 2 3 4 5 Min-Heap
7
8 9
10 3 6
7 8 9 10 3 6
3
7 6
10 8 9
1 Xây dựng Min-Heap 3 7 6 10 8 9
6
7 9
i ← 5; 10 8 3
2 swap(a[0], a[5]); 6 7 9 10 8 3
_heapify_top_down(a, 0, 5);
7
8 9
i ← 4; 10 6 3
3 swap(a[0], a[4]); 7 8 9 10 6 3
_heapify_top_down(a, 0, 4);
8
10 9
i ← 3; 7 6 3
4 swap(a[0], a[3]); 8 10 9 7 6 3
_heapify_top_down(a, 0, 3);
9
10 8
i ← 2; 7 6 3
5 swap(a[0], a[2]); 9 10 8 7 6 3
_heapify_top_down(a, 0, 2);
10
9 8
i ← 1; 7 6 3
6 swap(a[0], a[1]); 10 9 8 7 6 3
_heapify_top_down(a, 0, 1);
Bảng 5. Bảng chạy từng bước thuật toán Heap Sort. Các nút trong cây Min-Heap được vẽ nét đứt chỉ thị
không thỏa tính chất của Min-Heap. Dấu gạch chân mỗi phần tử của mảng chỉ thị rằng phần tử đó đã được
sắp xếp và sẽ không thay đổi vị trí trong các bước sắp xếp sau nữa.
Hết
Trang 7 / 7