CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
CHƯƠNG 3
SẮP XẾP NỘI
1
Nội Dung
1. Đổi chỗ trực tiếp – Interchange Sort
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
2. Chọn trực tiếp – Selection Sort
3. Nổi bọt – Bubble Sort
4. Chèn trực tiếp – Insertion Sort
5. Chèn nhị phân – Binary Insertion Sort
6. Shaker Sort
7. Shell Sort
8. Heap Sort
9. Quick Sort
10. Merge Sort
11. Radix Sort
2
Bài Toán Sắp Xếp
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Cho danh sách có n phần tử a0, a1, a2…, an-1.
Sắp xếp là quá trình xử lý các phần tử trong danh
sách để đặt chúng theo một thứ tự thỏa mãn một số
tiêu chuẩn nào đó dựa trên thông tin lưu tại mỗi phần
tử, như:
Sắp xếp danh sách lớp học tăng theo điểm trung
bình.
Sắp xếp danh sách sinh viên tăng theo tên.
…
Để đơn giản trong việc trình bày giải thuật ta dùng
mảng 1 chiều a để lưu danh sách trên trong bộ nhớ
chính.
3
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Bài Toán Sắp Xếp (tt)
a: là dãy các phần tử dữ liệu
Để sắp xếp dãy a theo thứ tự (giả sử theo thứ tự
tăng), ta tiến hành triệt tiêu tất cả các nghịch thế trong
a.
Nghịch thế:
• Cho dãy có n phần tử a0, a1,…,an-1
• Nếu i<j và ai >aj
34
3
4
8
a[0], a[1] là cặp nghịch thế
Đánh giá độ phức tạp của giải thuật, ta tính
Css: Số lượng phép so sánh cần thực hiện
CHV: Số lượng phép hoán vị cần thực hiện
4
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Các Thuật Toán Sắp Xếp
1. Đổi chỗ trực tiếp – Interchange Sort
2. Chọn trực tiếp – Selection Sort
3. Nổi bọt – Bubble Sort
4. Shaker Sort
5. Chèn trực tiếp – Insertion Sort
6. Chèn nhị phân – Binary Insertion Sort
7. Shell Sort
8. Heap Sort
9. Quick Sort
10. Merge Sort
11. Radix Sort
5
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Các Thuật Toán Sắp Xếp
1. Đổi chỗ trực tiếp – Interchange Sort
2. Chọn trực tiếp – Selection Sort
3. Nổi bọt – Bubble Sort
4. Shaker Sort
5. Chèn trực tiếp – Insertion Sort
6. Chèn nhị phân – Binary Insertion Sort
7. Shell Sort
8. Heap Sort
9. Quick Sort
10. Merge Sort
11. Radix Sort
6
Đổi Chỗ Trực Tiếp – Interchange Sort
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Ý tưởng: Xuất phát từ đầu dãy, tìm tất các các
nghịch thế chứa phần tử này, triệt tiêu chúng
bằng cách đổi chỗ 2 phần tử trong cặp nghịch
thế. Lặp lại xử lý trên với phần tử kế trong dãy.
7
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Các Bước Tiến Hành
Bước 1: i = 0; // bắt đầu từ đầu dãy
Bước 2: j = i+1; //tìm các nghịch thế với a[i]
Bước 3:
Trong khi j < N thực hiện
Nếu a[j]
Swap(a[i],a[j]);
j = j+1;
Bước 4: i = i+1;
Nếu i < N-1: Lặp lại Bước 2.
Ngược lại: Dừng.
8
Đổi Chỗ Trực Tiếp – Interchange Sort
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Cho dãy số a:
12
2 8
i=0
i=0
5
1
6
4
15
j=1
j=4
9
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Đổi Chỗ Trực Tiếp – Interchange Sort
i=1
i=1
i=1
j=2
j=3
j=4
10
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Đổi Chỗ Trực Tiếp – Interchange Sort
i=2
i=2
i=2
j=3
j=4
j=6
11
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Đổi Chỗ Trực Tiếp – Interchange Sort
i=3
i=3
i=3
j=4
j=5
j=6
12
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Đổi Chỗ Trực Tiếp – Interchange Sort
i=4
j=5
j=6
i=4
i=5
j=6
13
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Đổi Chỗ Trực Tiếp – Interchange Sort
i=6
j=7
14
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Cài Đặt Đổi Chỗ Trực Tiếp
void InterchangeSort(int a[], int N )
{
int
i, j;
for (i = 0 ; i
for (j =i+1; j < N ; j++)
if(a[j ]< a[i]) // Thỏa 1 cặp nghịch thế
Swap(a[i], a[j]);
}
15
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Minh Họa Thuật Toán
j
1
12
2
8
5
1
6
4
15
0
i
1
2
3
4
5
6
7
16
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Minh Họa Thuật Toán
j
1
12
2
8
5
2
6
4
15
0
i
1
2
3
4
5
6
7
0
17
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Minh Họa Thuật Toán
j
1
2
4
12
8
5
6
4
15
0
1
i
2
3
4
5
6
7
0
18
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Minh Họa Thuật Toán
j
1
2
4
5
12
8
6
5
15
0
1
2
i
3
4
5
6
7
0
19
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Minh Họa Thuật Toán
1
2
3
4
5
6
7
8
1
2
4
5
6
8
12
15
20
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Độ Phức Tạp Của Thuật Toán
21
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Các Thuật Toán Sắp Xếp
1. Đổi chỗ trực tiếp – Interchange Sort
2. Chọn trực tiếp – Selection Sort
3. Nổi bọt – Bubble Sort
4. Shaker Sort
5. Chèn trực tiếp – Insertion Sort
6. Chèn nhị phân – Binary Insertion Sort
7. Shell Sort
8. Heap Sort
9. Quick Sort
10. Merge Sort
11. Radix Sort
22
Chọn Trực Tiếp – Selection Sort
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Ý tưởng:
Chọn phần tử nhỏ nhất trong N phần tử trong
dãy hiện hành ban đầu.
Đưa phần tử này về vị trí đầu dãy hiện hành
Xem dãy hiện hành chỉ còn N-1 phần tử của
dãy hiện hành ban đầu
Bắt đầu từ vị trí thứ 2;
Lặp lại quá trình trên cho dãy hiện hành...
đến khi dãy hiện hành chỉ còn 1 phần tử
23
Các Bước Của Thuật Toán Chọn Trực Tiếp
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Bước 1: i = 0;
Bước 2: Tìm phần tử a[min] nhỏ nhất trong
dãy hiện hành từ a[i] đến a[N]
Bước 3 : Đổi chỗ a[min] và a[i]
Bước 4 : Nếu i < N-1 thì
i = i+1; Lặp lại Bước 2;
Ngược lại: Dừng.
24
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Chọn Trực Tiếp – Selection Sort
Cho dãy số a:
12
2
8
5
1
6
4
15
25