CHƯƠNG 2: CÁC THUẬT GIẢI SẮP XẾP VÀ TÌM KIẾM... 2.1 Một số phương pháp sắp xếp đơn giản... Tổng quan Để có thể sử dụng thuật toán tìm nhị phân Để thực hiện thao tác nào đó được nhanh
Trang 1CHƯƠNG 2: CÁC THUẬT GIẢI SẮP XẾP
VÀ TÌM KIẾM
Trang 22.1 Một số phương pháp sắp xếp đơn giản
Trang 3Nội dung
3
Trang 4Tổng quan
Để có thể sử dụng thuật toán tìm nhị phân
Để thực hiện thao tác nào đó được nhanh hơn
Sắp xếp là quá trình xử lý một danh sách các phần tử để đặt
chúng theo một thứ tự thỏa mãn một tiêu chuẩn nào đó dựa trên
nội dung thông tin lưu giữ tại mỗi phần tử
Chương 2: Sắp xếp
4
Trang 5Các phương pháp sắp xếp thông dụng
5
Trang 62.1.1 Đổi chổ trực tiếp (Interchange Sort)
Xét một mảng các số a[0], a[1], … a[n-1]
Nếu có i<j và a[i] > a[j], thì ta gọi đó là một nghịch thế
Trang 7Interchange Sort – Ý tưởng
Để sắp xếp một dãy số, ta có thể xét các nghịch thế có trong dãy
và làm triệt tiêu dần chúng đi
Xuất phát từ đầu dãy, tìm tất cả nghịch thế chứa phần tử này , triệt tiêu chúng bằng cách đổi chỗ phần tử này với phần tử tương ứng trong cặp nghịch thế
Lặp lại xử lý trên với các phần tử tiếp theo trong dãy
7
Trang 8Interchange Sort – Ví dụ
5
1 2
Trang 91 2
5 1
Trang 12Interchange Sort – Ví dụ
2
1 5 1
Trang 13Interchange Sort – Thuật toán
// input: dãy (a, n) // output: dãy (a, n) đã được sắp xếp
Bước 1: i = 0; // bắt đầu từ đầu dãy
Bước 2: j = i+1;
Bước 3: Trong khi j < n thực hiện:
Nếu a[i]>a[j] thì đổi chỗ a[i], a[j]
Trang 14Interchange Sort - Cài đặt
void InterchangeSort ( int a[], int n)
{
for ( int i=0 ; i<n-1 ; i++)
for ( int j=i+1; j<n ; j++)
if(a[i]>a[j]) //nếu có nghịch thế thì đổi chỗ
Swap (a[i], a[j]);
Trang 15Các phương pháp sắp xếp thông dụng
15
Trang 162.1.2 Nổi bọt (Bubble Sort) – Ý tưởng
phần tử nhỏ hơn trong cặp phần tử đó về vị trí đầu dãy hiện hành, sau đó sẽ không xét đến nó ở bước tiếp theo
Trang 17Bubble Sort – Ví dụ
5
1 2
Trang 18Bubble Sort – Ví dụ
1 2
5 1
Trang 23Bubble Sort – Ví dụ
2
1 5 1
1 2
23
Trang 24Bubble Sort – Thuật toán
// input: dãy (a, n) // output: dãy (a, n) đã được sắp xếp
Bước 1: i = 0;
Bước 2: j = n-1; //Duyệt từ cuối dãy ngược về vị trí i
Trong khi (j > i) thực hiện:
Nếu a[j]<a[j-1] thì đổi chỗ a[j], a[j-1]
Trang 25Bubble Sort - Cài đặt
void BubbleSort ( int a[], int n) {
for ( int i=0; i<n-1; i++)
for ( int j=n-1; j>i; j )
if (a[j] < a[j-1])
Swap (a[j], a[j-1]); }
25
Trang 26Bubble Sort - Đánh giá giải thuật
trạng của dãy số ban đầu
sánh
26
Chương 2: Sắp xếp
Trang 27Bubble Sort - Đánh giá giải thuật
Trang 28Interchange Sort - Đánh giá giải thuật
trạng của dãy số ban đầu
sánh
Chương 2: Sắp xếp
28
Trang 29Sinh viên mở file bài tập để rèn luyện phần đã học.