chương 2 tÌm kiẾm & sẮ p xẾ -...

79
1 2.1. Các giải thuật tìm kiếm 2.1.1. Bài toán tìm kiếm 2.1.2. Giải thuật tìm kiếm tuyến tính 2.1.3. Giải thuật Tìm kiếm nhị phân 2.2. Các giải thuật sắp xếp 2.2.1. Bài toán sắp xếp 3.2.1 Giải thuật đổi chổ trực tiếp –Interchange Sort 3.2.2 Giải thuật chọn trực tiếp-Selection Sort 3.2.3 Giải thuật chèn trực tiếp-Insert Sort 3.2.4 Giải thuật nổi bọt – Bubble Sort 3.2.5 Giải thuật nhanh – Quick Sort 2.3. Bài tập Chương 2 TÌM KIM & SP XP © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Upload: others

Post on 10-Sep-2019

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

1

2.1. Các giải thuật tìm kiếm

2.1.1. Bài toán tìm kiếm

2.1.2. Giải thuật tìm kiếm tuyến tính

2.1.3. Giải thuật Tìm kiếm nhị phân

2.2. Các giải thuật sắp xếp

2.2.1. Bài toán sắp xếp

3.2.1 Giải thuật đổi chổ trực tiếp –Interchange Sort

3.2.2 Giải thuật chọn trực tiếp-Selection Sort

3.2.3 Giải thuật chèn trực tiếp-Insert Sort

3.2.4 Giải thuật nổi bọt – Bubble Sort

3.2.5 Giải thuật nhanh – Quick Sort

2.3. Bài tập

Chương 2

TÌM KIẾM & SẮP XẾP

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Page 2: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

2

2.1 CÁC GIẢI THUẬT TÌM KIẾM

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

2.1.1. Bài toán tìm kiếm

2.1.2. Giải thuật tìm kiếm tuyến tính

2.1.3. Giải thuật Tìm kiếm nhị phân

Page 3: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

3

2.1.1 BÀI TOÁN TÌM KIẾM

Trong thực tế, khi thao tác, khai thác dữ liệu hầu như

lúc nào cũng phải thực hiện thao tác tìm kiếm.

Kết quả của việc tìm kiếm có thể là không tìm thấy

hoặc tìm thấy.

Nếu kết quả là tìm thấy thì nhiều khi còn phải xác định

xem vị trí của phần tử tìm thấy là ở đâu?

Việc tìm kiếm nhanh hay chậm tùy thuộc vào trạng thái

và trật tự của dữ liệu trên đó.

Có 2 thuật toán chính: Tìm kiếm tuyến tính & Tìm kiếm

nhị phân

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Page 4: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

4

Giả sử chúng ta có một mảng M gồm N phần tử.

Vấn đề đặt ra là có hay không phần tử có giá trị bằng X

trong mảng M?

Nếu có thì phần tử có giá trị bằng X là phần tử thứ mấy

trong mảng M?

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

2.1.1 BÀI TOÁN TÌM KIẾM

Page 5: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

5

2.1.2. GIẢI THUẬT TÌM KIẾM TUYẾN TÍNH

Ý Tưởng:

Tiến hành so sánh x với phần tử thứ nhất, thứ hai…của

mảng A cho đến khi gặp được phần tử có khóa cần tìm,

hoặc đã tìm hết mảng mà không thấy x.

Ưu điểm: Thuật toán này có thể cho ta thực hiện tìm

kiếm khi các phần tử trong mảng chưa được sắp xếp.

Nhược điểm: Sẽ mất rất nhiều thời gian nếu như

không có phần tử chúng ta cần tìm.

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Page 6: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

6

VD:Tìm x = 14

12 3 5 1 14 9 0 10 2 7 14

14

Chưa

hết

mảng

Tìm thấy

tại vị trí thứ

5

1 2 3 4 5 6 7 8 9 10

12 3 5 1 14 9 0 10 2 7

VD:Tìm x = 30

30

Chưa

hết

mảng

1 2 3 4 5 6 7 8 9 10

Minh Họa

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

2.1.2. GIẢI THUẬT TÌM KIẾM TUYẾN TÍNH

Page 7: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

7

Giải thuật:

Bước 1 :

i = 1; // Bắt đầu từ phần tử đầu tiên của dãy

Bước 2 : So sánh a[i] với x, có 2 khả năng.

• a[i] = x ; // Tìm thấy.Dừng

• a[i] != x ; // Thực hiện bước 3.

Bước 3 :

• i = i+1; // xét phần tử kế tiếp trong mảng.

• Nếu i > N // Hết mảng.Không tìm thấy.Dừng

Ngược lại: Lặp lại bước 2.

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

2.1.2. GIẢI THUẬT TÌM KIẾM TUYẾN TÍNH

Page 8: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

8

Cài Đặt

Int Timtuyentinh (int a[] , int N , int x)

{

int i = 0;

while((i < N) && (a[i] != x))

i++;

if( i == N)

return -1 ; // tìm hết mảng nhưng không có x

else

return i ; //a[i] là phần tử có khóa x.

}

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Đánh giá giải thuật

Độ phức tập tính toán cấp n: T(n)=O(n)

2.1.2. GIẢI THUẬT TÌM KIẾM TUYẾN TÍNH

Page 9: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

9

2.1.3 GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

Ý Tưởng:

- Lần tìm kiếm ban đầu là phần tử đầu tiên của dãy

(First = 1) đến phần tử cuối cùng của dãy (Last = N).

- So sánh giá trị X với giá trị phần tử đứng ở giữa

của dãy M là M[Mid].

- Nếu X = M[Mid]: Tìm thấy

- Nếu X < M[Mid]: Rút ngắn phạm vi tìm kiếm

về nửa đầu của dãy M (Last = Mid–1)

- Nếu X > M[Mid]: Rút ngắn phạm vi tìm kiếm

về nửa sau của dãy M (First = Mid+1)

- Lặp lại quá trình này cho đến khi tìm thấy phần tử

có giá trị X hoặc phạm vi tìm kiếm không còn nữa

(First > Last).

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Page 10: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

10

Ưu điểm: Thuật toán tìm nhị phân sẽ rút ngắn đáng

kể thời gian tìm kiếm.

Nhược điểm: Chỉ thực hiện được trên dãy đã có thứ

tự.

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

2.1.3 GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

Page 11: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

1 12 34 46 23 59 69 77

11

Minh Họa

59 90 85 69 77 7 12 34 46 23

L

Tìm giá trị X = 85 (Tìm thấy)

M

X

Mid = 5

M[mid]= 46

X > M[mid]

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

F

2.1.3 GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

Page 12: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

7 12 34 46 23 59 69 77

12

Minh Họa

59 90 85 69 77

Tìm giá trị X = 85 (Tìm thấy)

M

X

Mid = 8

M[mid] = 77

X > M[mid]

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

F L

2.1.3 GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

Page 13: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

7 12 34 46 23 59 69 77

13

Minh Họa

90 85

Tìm giá trị X = 85 (Tìm thấy)

Đã tìm

thấy tại

vị trí 9

M

X

Mid = 9

M[mid] = 85

X = M[mid]

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

L F

2.1.3 GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

Page 14: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

Minh Họa

Tìm kiếm phần tử có giá trị X = 5 (tìm thấy):

Lần

lặp First Last

First>L

ast Mid M[Mid]

X=

M[Mid]

X<

M[Mid]

X>

M[Mid]

B.đầu 1 10 False 5 8 False True False

1 1 4 False 2 3 False False True

2 3 4 False 3 4 False False True

3 4 4 False 4 5 True

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Giả sử dãy M gồm 10 phần tử có khóa như sau (N = 10).

2 3 4 5 8 15 17 22 25 30

14

2.1.3 GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

Page 15: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

Minh Họa

Tìm kiếm phần tử có giá trị X = 7 (không tìm thấy)

Lần

lặp First Last

First>

Last Mid M[Mid]

X=

M[Mid]

X<

M[Mid]

X>

M[Mid]

B.đầu 1 10 False 5 8 False True False

1 1 4 False 2 3 False False True

2 3 4 False 3 4 False False True

3 4 4 False 4 5 False False True

4 5 4 True

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Giả sử dãy M gồm 10 phần tử có khóa như sau (N=10).

1 3 4 5 8 15 17 22 25 30

15

2.1.3 GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

Page 16: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

16

Giải thuật:

B1: First = 1

B2: Last = N

B3: IF (First > Last)

B3.1: Không tìm thấy

B3.2: Thực hiện Bkt

B4: Mid = (First + Last)/ 2

B5: IF (X = M[Mid])

B5.1: Tìm thấy tại vị trí Mid

B5.2: Thực hiện Bkt

B6: IF (X < M[Mid])

B6.1: Last = Mid – 1

B6.2: Lặp lại B3

B7: IF (X > M[Mid])

B7.1: First = Mid + 1

B7.2: Lặp lại B3

Bkt: Kết thúc © Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

2.1.3 GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

Page 17: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

17

Cài Đặt int Timnhiphan(int M[ ], int N, int X){

int First = 1; int Last = N;

while (First <= Last){

int Mid = (First + Last)/2;

if (X == M[Mid])

return Mid;

if (X < M[Mid])

Last = Mid – 1;

else

First = Mid + 1;

}

return -1;

}

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Đánh giá giải thuật

Độ phức tập tính toán cấp n: T(n)=O(Log2n)

2.1.3 GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

Page 18: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

18

2.2 CÁC GIẢI THUẬT SẮP XẾP

© Dương Thành Phết-www.thayphet.net

2.2.1. Bài toán sắp xếp

2.2.2. Giải thuật đổi chổ trực tiếp –Interchange Sort

2.2.3. Giải thuật chọn trực tiếp-Selection Sort

2.2.4. Giải thuật chèn trực tiếp-Insert Sort

2.2.5. Giải thuật nổi bọt – Bubble Sort

2.2.6. Giải thuật nhanh – Quick Sort

Khoa CNTT Trường TC TÂY NAM Á

Page 19: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

19

2.2.1. BÀI TOÁN SẮP XẾP

Để thuận tiện và giảm thiểu thời gian thao tác mà đặc

biệt là để tìm kiếm, sắp xếp dữ liệu là một trong những

thao tác cần thiết và thường gặp trong quá trình lưu trữ,

quản lý dữ liệu.

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ự tăng hoặc giảm dựa trên

nội dung lưu trữ trên mỗi phần tử.

Có rất nhiều thuật toán sắp xếp song chúng ta chỉ

quan tâm đến 5 giải thuật sắp xếp thường sử dụng.

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Page 20: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

20

© Dương Thành Phết-www.thayphet.net

Khái niệm về nghịch thế:

a1 a2 a3 . . . . . . . . . . an-1 an

Giả sử mảng có thứ tự tăng dần, nếu i<j và ai>aj thì

gọi là nghịch thế

Mục tiêu của sắp xếp là khử các nghịch thế(bằng

cách hoán vị các phần tử)

Khoa CNTT Trường TC TÂY NAM Á

2.2.1. BÀI TOÁN SẮP XẾP

Page 21: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

2.2.2. GIẢI THUẬT ĐỔI CHỔ TRỰC TIẾP-INTERCHANGE SORT

21

© Dương Thành Phết-www.thayphet.net

Ý tưởng:

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.

Khoa CNTT Trường TC TÂY NAM Á

Page 22: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

22

© Dương Thành Phết-www.thayphet.net

Minh Họa

2 12 8 5 1 6 4

2 12 8 5 1 6 4

i=1 j=2 j=5 i=2 j=3 j=4 i=3 j=7 i=4 j=6 i=5 i=6 i=7

Khoa CNTT Trường TC TÂY NAM Á

2.2.2. GIẢI THUẬT ĐỔI CHỔ TRỰC TIẾP-INTERCHANGE SORT

Page 23: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

23

© Dương Thành Phết-www.thayphet.net

2 12 8 5 1 6 4

12 1 8 5 2 6 4

2 1 12 8 5 6 4

2 1 4 12 8 6 5

2 1 4 5 12 8 6

2 1 4 5 6 12 8

2 1 4 5 6 8 12

Ban đầu

Lần 1

Lần 2

Lần 3

Lần 4

Lần 5

Lần 6

Khoa CNTT Trường TC TÂY NAM Á

2.2.2. GIẢI THUẬT ĐỔI CHỔ TRỰC TIẾP-INTERCHANGE SORT

Page 24: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

24

© Dương Thành Phết-www.thayphet.net

Giải thuật:

Bước 1 :

i = 1; // bắt đầu từ đầu dãy

Bước 2 :

j = i+1;//tìm các phần tử a[j] < a[i], j>i

Bước 3 :

Trong khi j < N thực hiện

Nếu a[j]<a[i]: Đổi chổ a[i] và a[j];

j = j+1;

Bước 4 :

i = i+1;

Nếu i < n: Lặp lại Bước 2.

Ngược lại: Dừng.

Khoa CNTT Trường TC TÂY NAM Á

2.2.2. GIẢI THUẬT ĐỔI CHỔ TRỰC TIẾP-INTERCHANGE SORT

Page 25: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

25

© Dương Thành Phết-www.thayphet.net

Cài Đặt

void InterchangeSort(int a[], int N )

{ int i, j,tam;

for (i = 0 ; i<N-1 ; i++)

for (j =i+1; j < N ; j++)

if(a[j ]< a[i])

{

tam=a[i];

a[i]=a[j];

a[j]=tam;

}

}

Khoa CNTT Trường TC TÂY NAM Á

2.2.2. GIẢI THUẬT ĐỔI CHỔ TRỰC TIẾP-INTERCHANGE SORT

Page 26: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

26

© Dương Thành Phết-www.thayphet.net

Đánh giá giải thuật:

Ðối với giải thuật đổi chỗ trực tiếp, số lượng các

phép so sánh xảy ra không phụ thuộc vào tình trạng

của dãy số ban đầu

Nhưng số lượng phép hoán vị thực hiện tùy thuộc

vào kết qủa so sánh

Khoa CNTT Trường TC TÂY NAM Á

2.2.2. GIẢI THUẬT ĐỔI CHỔ TRỰC TIẾP-INTERCHANGE SORT

Page 27: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

27

© Dương Thành Phết-www.thayphet.net

Ý Tưởng:

Đầu tiên dãy có N phần tử, ta chọn phần tử nhỏ nhất

trong dãy đổi chổ cho phần tử đầu tiên.

Tiếp theo, tìm phần tử nhỏ nhất của dãy n-1 phần tử

còn lại trong dãy đổi chổ cho phần tử thứ 2 của dãy.

Quá trình trên thực hiên đến khi nào trong mảng chỉ

còn 1 phần tử thi dừng lại.

Kết quả được mảng đã sắp xếp tăng.

Khoa CNTT Trường TC TÂY NAM Á

Page 28: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

28

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

I=1

Min

11 45 28 73 61 7 23 16

11 45 28 73 61 7 23 16

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 29: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

29

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

11 45 28 73 61 16 23 7

I=2

Min

11 45 28 73 61 7 23 16

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 30: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

30

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

11 28 73 61 23 7

I=3

Min

45 16

11 45 28 73 61 7 23 16

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 31: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

31

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

11 73 61 7 16 45

I=4

Min

28 23

11 45 28 73 61 7 23 16

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 32: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

32

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

11 61 7 16 45 23

Min

I=5

73 28

11 45 28 73 61 7 23 16

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 33: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

33

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

11 7 16 23 28 73

I=6

Min

45 61

11 45 28 73 61 7 23 16

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 34: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

34

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

11 7 16 23 28 73 61 45

I=7

Min

11 45 28 73 61 7 23 16

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 35: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

35

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

11 7 16 23 28 73 61 45

Kết thúc vì mảng

chỉ còn 1 phần tử

11 45 28 73 61 7 23 16

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 36: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

36

© Dương Thành Phết-www.thayphet.net

Ban đầu

Lần 1

Lần 2

Lần 3

Lần 4

Lần 5

Lần 6

11 45 28 73 61 7 23 16

11 45 28 73 61 16 23 7

11 45 28 73 61 16 23 7

11 16 28 73 61 45 23 7

11 16 23 73 61 45 28 7

11 16 23 28 61 45 73 7

11 16 23 28 45 61 73 7

11 16 23 28 45 61 73 7 Lần 7

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 37: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

37

© Dương Thành Phết-www.thayphet.net

Giải thuật:

Bước 1:

I = 1

Bước 2:

Tìm phần tử nhỏ nhất a[min] trong dãy

hiện hành từ a[i] đến a[min]

Bước 3 :

Đổi chổ cho a[min] và a[i]

Bước 4 :

I = I + 1

Nếu I < N thì lập lại bước 2

Ngược lại thì dừng.

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 38: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

38

© Dương Thành Phết-www.thayphet.net

Cài Đặt void SelectionSort(int a[], int n)

{

int min, i, j, tam;

for (i = 0; i < n - 1; i++)

{

a[min] = a[i];

for (j = i + 1; j < n; j++)

if (a[j] < a[min])

a[min] =a[j];

tam=a[i];

a[i]=a[min];

a[min]=tam ;

}

} Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 39: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

39

© Dương Thành Phết-www.thayphet.net

Đánh giá giải thuật:

Ðối với giải thuật chọn trực tiếp, có thể thấy rằng ở

lượt thứ i, bao giờ cũng cần (n-i) lần so sánh để xác

định phần tử nhỏ nhất hiện hành. Số lượng phép so

sánh này không phụ thuộc vào tình trạng của dãy

số ban đầu, do vây kết luận:

Khoa CNTT Trường TC TÂY NAM Á

2.2.3 GIẢI THUẬT CHỌN TRỰC TIẾP –SELECTION SORT

Page 40: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

40

© Dương Thành Phết-www.thayphet.net

Ý Tưởng:

Cho dãy ban đầu a1, a2, …, an, ta có thể xem như đã

có đoạn gồm 1 phần tử a1 đã được sắp xếp,

Sau đó thêm a2 vào đoạn a1 sẽ có đoạn a1 a2 được

sắp xếp.

Tiếp tục thêm a3 vào đoạn a1 a2 để có đoạn a1 a2 a3

được sắp xếp.

Tiếp tục cho đến thêm khi xong an vào đoạn a1 a2

…an-1 sẽ có dãy a1 a2 ..an được sắp xếp

Khoa CNTT Trường TC TÂY NAM Á

Page 41: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

41

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

13 7 9 4 11 3 17 15

1 2 3 4 5 6 7 8

i=2

13 7 9 4 11 3 17 15

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 42: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

42

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

7 4 11 3 17 15

1 2 3 4 5 6 7 8

13 9

i=3

13 7 9 4 11 3 17 15

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 43: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

43

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

11 17 15

1 2 3 4 5 6 7 8

3

i=4

7 9 13 4

13 7 9 4 11 3 17 15

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 44: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

44

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

17 15

1 2 3 4 5 6 7 8

3 4 7 9 13 11

i=5

13 7 9 4 11 3 17 15

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 45: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

45

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

17 15

1 2 3 4 5 6 7 8

4 7 9 11 13 3

i=6

13 7 9 4 11 3 17 15

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 46: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

46

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

15

1 2 3 4 5 6 7 8

3 4 7 9 11 13

i=7

17

13 7 9 4 11 3 17 15

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 47: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

47

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1 2 3 4 5 6 7 8

3 4 7 9 11 13

i=8

17 15

Kết thúc

13 7 9 4 11 3 17 15

Minh Họa

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 48: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

48

© Dương Thành Phết-www.thayphet.net

13 7 9 4 11 3 17 15 Ban đầu

Lần 1

Lần 2

Lần 3

Lần 4

Lần 5

Lần 6

Lần 7

7 13 9 4 11 3 17 15

7 9 13 4 11 3 17 15

4 7 9 13 11 3 17 15

4 7 9 11 13 3 17 15

3 4 7 9 11 13 17 15

3 4 7 9 11 13 17 15

3 4 7 9 11 13 15 17

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 49: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

49

© Dương Thành Phết-www.thayphet.net

Giải thuật:

Bước 1:

i=2; // a[1] đã được sắp xếp

Bước 2:

x=a[i];

Tìm vị trí pos thích hợp trong đoạn a[1] đến a[i-1]

để chèn a[i] vào

Bước 3:

Dời chỗ phần tử a[pos] đến a[i-1] sang phải một

vị trí để dành chỗ cho a[i]

Bước 4:

a[pos]=x //đoạn a[1] đến a[i] đã được sắp

Bước 5:

i=i+1;

Nếu i<n : lặp lại bước 2

Ngược lại: dừng

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 50: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

50

© Dương Thành Phết-www.thayphet.net

Cài Đặt void InsertSort(int a[],int n) { int pos, x; for(int i=1 ; i<n ; i++) {

x=a[i]; pos=i-1; // tìm vị trí chèn x while((pos >=0 )&&(a[pos]>=x) { a[pos+1]=a[pos]; pos--; } a[pos+1]=x; //chèn x vào dãy

} }

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 51: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

51

© Dương Thành Phết-www.thayphet.net

Đánh giá giải thuật:

Các phép so sánh xảy ra trong vòng lặp while tìm

vị trí thích hợp pos, và mỗi lần xác định vị trí đang

xét không thích hợp, sẽ dời chỗ phần tử a[pos]

tương ứng.

Giải thuật thực hiện tất cả n – 1 vòng lặp while, do

số lượng phép so sánh và dời chỗ này phụ thuộc

vào tình trạng của dãy số ban đầu, nên chỉ có ước

lượng trong từng trường hợp sau:

Khoa CNTT Trường TC TÂY NAM Á

2.2.4. GIẢI THUẬT CHÈN TRỰC TIẾP –INSERT SORT

Page 52: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

52

© Dương Thành Phết-www.thayphet.net

Ý Tưởng:

Xuất phát từ cuối dãy ,đổi chổ các cặp phần tử kế

cận để đưa phần tử đó về vị trí đứng đầu dãy hiện

hành

Sau đó sẽ không xét đến nó ở bước tiếp theo

Do vậy ở lần xử lý thứ i sẽ có vị trí dầu dãy là i phần

tử được sắp xếp.

Lặp lại xử lý trên cho đến khi không còn phần tử nào

để xét.

Khoa CNTT Trường TC TÂY NAM Á

Page 53: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

1

53

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

11

5

7

3

9

2

15

2

1

3

4

5

6

7

8

i

j 1

11

5

7

3

9

2

15

2

1

3

4

5

6

7

8

Ban đầu

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 54: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

15

54

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1

11

5

7

3

9

2

2

1

3

4

5

6

7

8

i

j

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 55: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

15

55

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1

2

11

5

7

3

9

2

1

3

4

5

6

7

8

i

j

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 56: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

15

56

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1

2

3

11

5

7

9

2

1

3

4

5

6

7

8

i

j

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 57: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

15

57

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1

2

3

5

11

7

9

2

1

3

4

5

6

7

8

i

j

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 58: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

15

58

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1

2

3

5

7

11

9

2

1

3

4

5

6

7

8

i

j

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 59: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

15

59

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1

2

3

5

7

9

11

2

1

3

4

5

6

7

8

i

j

Kết

thúc

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 60: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

60

© Dương Thành Phết-www.thayphet.net

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

Minh Họa

1

11

5

7

3

9

2

15

2

1

3

4

5

6

7

8 15

1

11

5

7

3

9

2

2

1

3

4

5

6

7

8 15

1

2

11

5

7

3

9

2

1

3

4

5

6

7

8 15

1

2

3

11

5

7

9

2

1

3

4

5

6

7

8 15

1

2

3

5

11

7

9

2

1

3

4

5

6

7

8 15

1

2

3

5

7

11

9

2

1

3

4

5

6

7

8 15

1

2

3

5

7

9

11

2

1

3

4

5

6

7

8 15

1

2

3

5

7

9

11

2

1

3

4

5

6

7

8

Ban đầu Bước 1 Bước 2 Bước 3 Bước 4 Bước 5 Bước 6 Bước 7

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 61: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

61

© Dương Thành Phết-www.thayphet.net

Giải thuật:

Bước 1:

i=1;

Bước 2:

j=N;

Trong khi (j>i) thực hiện:

Nếu a[j]<a[j-1]: Hoán vị a[j] và a[j-1]

j—;

Bước 3:

i=i+1;

Nếu i>N-1: Hết dãy, dừng

Ngược lại: Lặp lại Bước 2

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 62: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

62

© Dương Thành Phết-www.thayphet.net

Cài Đặt

void bubblesort(t M[],int N)

{

for ( int i=0 ; i<N-1 ; i++)

for(int j=N-1 ; j>i ; j--)

if(M[j]<M[j-1])

{

int tam=M[j];

M[j]=M[j-1];

M[j-1]=tam;

}

}

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 63: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

63

© Dương Thành Phết-www.thayphet.net

Đánh giá giải thuật:

Ðối với giải thuật nổi bọt, số lượng các phép so

sánh xảy ra không phụ thuộc vào tình trạng của dãy

số ban đầu

Nhưng số lượng phép hoán vị thực hiện tùy thuộc

vào kết qủa so sánh

Khoa CNTT Trường TC TÂY NAM Á

2.2.5. GIẢI THUẬT NỔI BỌT –BUBBLE SORT

Page 64: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

64

© Dương Thành Phết-www.thayphet.net

Ý Tưởng:

Phân hoạch dãy M thành 2 dãy con thỏa mãn điều

kiện: “1/2 Dãy bên trái chứa các phần tử nhỏ hơn

các phần tử của 1/2 Dãy bên phải”

Nếu dãy con có nhiều hơn 1 phần tử thì thực hiện

sắp xếp dãy con (Đệ qui).

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Khoa CNTT Trường TC TÂY NAM Á

Page 65: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

65

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

10 5 7 3 9 2 15 1

Đoạn cần

sắp xếp

L=1

R=8

i=1; j=8

L R X=3

i j

Đoạn 1

L=1

R=3

Đoạn 2

L=4

R=8 Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 66: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

66

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1 2 3 7 9 5 15 10

Đoạn cần

sắp xếp

i=4; j=8

L R X=5

i j

L=1

R=3

L=4

R=8

Đoạn 1 Đoạn 2

L=4

R=5

L=5

R=8

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 67: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

67

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1 2 3 5 9 7 15 10

Đoạn cần

sắp xếp

i=5; j=8

L R X=7

i j

L=1

R=3

L=4

R=5

L=6

R=8

L=5

R=8

Đoạn 2

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 68: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

68

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1 2 3 5 7 9 15 10

Đoạn cần

sắp xếp

i=6; j=8

L R X=15

i j

L=1

R=3

L=4

R=5

L=6

R=8

L=6

R=7

Đoạn 1

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 69: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

69

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1 2 3 5 7 9 10 15

Đoạn cần

sắp xếp

i=6; j=7

L R

X=15

i j

L=1

R=3

L=4

R=5

L=6

R=7

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 70: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

70

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1 2 3 5 7 9 10 15

Đoạn cần

sắp xếp

i=4; j=5

L R

X=5

i j

L=1

R=3

L=4

R=5

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 71: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

71

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1 2 3 5 7 9 10 15

Đoạn cần

sắp xếp

i=1; j=3

L R X=2

i j

L=1

R=3

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 72: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

72

© Dương Thành Phết-www.thayphet.net

Minh Họa

Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần

1 2 3 5 7 9 10 15

Đoạn cần

sắp xếp

Không còn đoạn

nào cần sắp xếp

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 73: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

73

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

10 5 7 3 9 2 15 1

7 9 5 15 10

9 7 15 10

9 10 15

9 10

5 7

1 2 3

Đoạn [1- 8]

Đoạn [4- 8]

Đoạn [5- 8]

Đoạn [6- 8]

Đoạn [6- 7]

Đoạn [4- 5]

Đoạn [1- 3]

Page 74: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

74

© Dương Thành Phết-www.thayphet.net

Giải thuật:

Bước 1:

i=1;

Bước 2:

j=N;

Trong khi (j>i) thực hiện:

Nếu a[j]<a[j-1]: Hoán vị a[j] và a[j-1]

j—;

Bước 3:

i=i+1;

Nếu i>N-1: Hết dãy, dừng

Ngược lại: Lặp lại Bước 2

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 75: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

75

© Dương Thành Phết-www.thayphet.net

Cài Đặt void QuickSort(int M[], int First, int Last)

{

int i, j, tam, x;

x = M[(First+Last)/2]; i = First; j = Last;

do {

while (M[i] <x) i++;

while (M[j] > X) j--;

if (i <= j)

{

tam=M[i];

M[i]=M[j];

M[j]=tam;

i++; j--;

}

}while (i<= i);

QuickSort(M, First, j);

QuickSort (M, i, Last);

} Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 76: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

76

© Dương Thành Phết-www.thayphet.net

Đánh giá giải thuật:

+ Trường hợp tốt nhất, khi mảng M có thứ tự tăng:

Số phép gán: Gmin = N-1

Số phép so sánh: Smin = N×Log2(N)/2

Số phép hoán vị: Hmin = 0

+ Trường hợp xấu nhất, khi phần tử X được chọn

ở giữa dãy con là giá trị lớn nhất:

Số phép gán: Gmax = N×(N-1)/2

Số phép so sánh: Smax = (N-1)×(N-1)

Số phép hoán vị: Hmax = N×(N-1)/2

+ Trung bình:

Số phép gán: Gavg = (N-1)×(N+2)/4

Số phép so sánh: Savg = N×[Log2(N)+2N–2]/4

Số phép hoán vị: Havg = N×(N-1)/4

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 77: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

77

© Dương Thành Phết-www.thayphet.net

Chi phí trung bình O(n*log2n)

Chi phí cho trường hợp xấu nhất O(n2)

Chi phí này phụ thuộc vào cách chọn phần tử trục:

- Nếu chọn được phần tử có giá trị trung bình ta

sẽ chia thành 2 dãy bằng nhau

- Nếu chọn nhằm phần tử nhỏ nhất (hay lớn

nhất) O(n2)

Khoa CNTT Trường TC TÂY NAM Á

2.2.6.GIẢI THUẬT SẮP XẾP NHANH–QUICK SORT

Page 78: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

78

1. Trình bày tư tưởng và minh họa giải thuật tìm kiếm

tuyến tính, tìm kiếm nhị phân

2. Cài đặt thuật toán tìm tuyến tính bằng cách:

- Sử dụng vòng lặp for

- Sử dụng vòng lặp while

3. Trong trường hợp các phần tử của dãy đã có thứ tự

tăng (hoặc giảm) hãy cài đặt lại thuật toán tìm nhị phân

2.3 Bài Tập

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á

Page 79: Chương 2 TÌM KIẾM & SẮ P XẾ - thayphet.netthayphet.net/application/upload/products/03.Chuong2.pdf · 3 2.1.1 BÀI TOÁN TÌM KIẾM Trong thực tế, khi thao tác, khai

79

1. Trình bày tư tưởng và minh họa 5 giải thuật sắp xếp

2. Cài đặt 5 giải thuật sắp xếp theo các trường hợp và

điền kết quả số lần thực hiện các phép toán vào bảng

sau:

© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường TC TÂY NAM Á