Tải bản đầy đủ (.ppt) (77 trang)

CAC THUAT TOAN SAP XEP - haui ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.47 MB, 77 trang )

1
CHƯƠNG 5
CÁC THUẬT TOÁN SẮP XẾP
2/77
NỘI DUNG

Khái niệm sắp xếp

Các thuật sắp xếp đơn giản

Các thuật toán sắp xếp nhanh
3/77
5.1 KHÁI NIỆM SẮP XẾP

Đặt vấn đề

Cho dãy số

Cho danh sách tên học sinh

81 52 73 21 44
81 73 52 44 21
Hùng
Thắng
An
Bình
Hoàng
An
Bình
Hoàng
Hùng


Thắng
21 44 52 73 81
4/77
5.1 KHÁI NIỆM SẮP XẾP

Khái niệm

Sắp xếp là việc biến đổi vị trí của một tập đối
tượng theo một trật tự nhất định

Mục đích

Giúp việc tìm kiếm, chọn lọc thông tin được
dễ dàng, nhanh chóng
5/77
BÀI TOÁN SẮP XẾP

Giả thiết các khóa là số nguyên được lưu
trong mảng một chiều, thứ tự sắp xếp là tăng
dần
Đầu vào: Dãy n đối tượng, mỗi đối
tượng có một khóa sắp xếp

Đầu ra: Dãy n đối tượng được sắp
xếp theo trật tự của khóa.
BÀI
TOÁN
6/77
5.2 CÁC THUẬT TOÁN SẮP XẾP ĐƠN GiẢN


Thuật toán sắp xếp lựa chọn (Selectsort)

Thuật toán sắp xếp chèn (Insertsort)

Thuật toán sắp xếp nổi bọt (Bubblesort)
7/77

Ý tưởng thuật toán

Dựa vào thuật toán tìm MAX, MIN

Ở lần duyệt thứ i, với 0<=i<n-1 tìm ra phần
tử nhỏ nhất đổi chỗ cho phần tử thứ i.

Sau n-1 lượt dãy được sắp xếp

Ví dụ Cho mảng a có 5 số nguyên (n=5)
5.2.1 THUẬT TOÁN SẮP XẾP LỰA CHỌN
a0 a1 a2 a3 a4
3 -1 7 5 -4
8/77
5.2.1 THUẬT TOÁN SẮP XẾP LỰA CHỌN
3 -1 5 7 -4
-4 -1 5 7 3
-4 -1 5 7 3
-4 -1 5 7 3
Lần 1
Lần 2
9/77
5.2.1 THUẬT TOÁN SẮP XẾP LỰA CHỌN

-4 -1 5 7 3
-4 -1 3 7 5
-4 -1 3 7 5
-4 -1 3 5 7
Lần 3
Lần 4
10/77

Ví dụ 2

Cho mảng số nguyên như sau

Yêu cầu: Mô tả quá trình sắp xếp dãy số
theo thứ tự giảm dần.
5.2.1 THUẬT TOÁN SẮP XẾP LỰA CHỌN
a0 a1 a2 a3 a4 a5
53 -21 67 15 82 -14
11/77
void chon( int a[], int n )

{ int i, j, tg, m ;
for (i=0; i<n-1; i++)
{ m=i ;
for (j=i+1; j<n; j++)
if (a[j]<a[m]) m=j;
if (m!=i)
{ tg=a[i]; a[i]=a[m]; a[m]=tg; }

}
}

5.2.1 THUẬT TOÁN SẮP XẾP LỰA CHỌN
12/77

Ý tưởng thuật toán
5.2.2 THUẬT TOÁN SẮP XẾP CHÈN
3
4
7
9
3
4
6
7
9
3
4
6
7
9
13/77

Ý tưởng thuật toán :

Ở lần duyệt thứ i, với 0<i<n đặt phần tử ở vị trí i
vào đúng thứ tự của nó so với i phần tử trước đã
được sắp xếp.

Sau n-1 lượt dãy được sắp xếp
5.2.2 THUẬT TOÁN SẮP XẾP CHÈN
14/77


Ví dụ

Cho mảng a có 5 số nguyên (n=5) như sau

Yêu cầu sắp xếp dãy số theo chiều tăng dần
5.2.2 THUẬT TOÁN SẮP XẾP CHÈN
a0 a1 a2 a3 a4
3 -1 7 -4 5
15/77

Xem dãy cần sắp gồm 2 dãy nối tiếp

Dãy trái (dãy đích) gồm các phần tử đã
được sắp, dãy phải (dãy nguồn) là các phần
tử chưa được sắp.
5.2.2 THUẬT TOÁN SẮP XẾP CHÈN
a0 a1 a2 a3 a4
3 -1 7 -4 5
Dãy đích Dãy nguồn
16/77

Ý tưởng thuật toán

Lấy phần tử đầu dãy nguồn chèn vào vị trí thích hợp
trong dãy đích
5.2.2 THUẬT TOÁN SẮP XẾP CHÈN
3 -1 7 -4 5
3 7 -4 5
-1 3 7 -4 5

tg
-1
Lần 1
17/77
5.2.2 THUẬT TOÁN SẮP XẾP CHÈN
-1 3 7 -4 5
-1 3 7 -4 5
tg
7
-1 3 7 5
-1 3 7 -4 5
tg
- 4
-4 -1 3 7 5
Lần 3
Lần 2
18/77
5.2.2 THUẬT TOÁN SẮP XẾP CHÈN
tg
5
-4 -1 3 5 7
-4 -1 3 7 5
-4 -1 3 7
Lần 4
19/77

Ví dụ 2

Cho mảng số nguyên như sau


Yêu cầu: Mô tả quá trình sắp xếp dãy số
theo chiều giảm dần bằng thuật toán chèn
5.2.2 THUẬT TOÁN SẮP XẾP CHÈN
a0 a1 a2 a3 a4 a5
53 -21 67 15 82 -14
20/77
void chen(int a[], int n)
{ int i, j, tg ;
for (i=1; i<n; i++)
{ j=i-1 ; tg=a[i] ;
while ((j>=0) && (a[j]>tg))
{ a[j+1]=a[j]; j ; }
a[j+1]=tg;
}
}
5.2.2 THUẬT TOÁN SẮP XẾP CHÈN
21/77
5.2.3 THUẬT TOÁN SẮP XẾP NỔI BỌT

Ý tưởng thuật toán :

Ở lần duyệt thứ i, với 0<=i<n-1, xuất phát từ cuối
dãy, so sánh hai phần tử kế tiếp nhau, phần tử
nào nhỏ hơn cho đổi lên. Phần tử nhỏ nhất sẽ
được đổi lên vị trí thứ i.

Sau n -1 lượt dãy được sắp xếp
22/77

Ví dụ


Cho mảng a có 5 số nguyên (n=5) như sau

Yêu cầu sắp xếp dãy số theo chiều tăng dần
5.2.3 THUẬT TOÁN SẮP XẾP NỔI BỌT
a0 a1 a2 a3 a4
3 -1 7 -4 5
23/77
5.2.3 THUẬT TOÁN SẮP XẾP NỔI BỌT
a0 a1 a2 a3 a4
3 -1 7 -4 5
3 -1 7 -4 5
3 -1 -4 7 5
3 -4 -1 7 5
-4 3 -1 7 5
Lần 1
24/77
5.2.3 THUẬT TOÁN SẮP XẾP NỔI BỌT
-4 3 -1 7 5
-1 3 5 7
3 5 7
5 7
-4 -1 3 5 7
Lần 1
Lần 2
Lần 3
Lần 4
25/77

Ví dụ 2:


Cho dãy số sau

Yêu cầu: Mô tả quá trình sắp xếp dãy theo
chiều giảm dần bằng thuật toán nổi bọt.
5.2.3 THUẬT TOÁN SẮP XẾP NỔI BỌT
a0 a1 a2 a3 a4 a5
-35 41 23 15 -62 71

×