1. Trang chủ
  2. » Giáo Dục - Đào Tạo

các thuật toán sắp xếp cơ bản pdf

39 2,5K 54

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 39
Dung lượng 1,72 MB

Nội dung

 Ý tưởng giải thuật Dựa vào việc so sánh và đổi chỗ nếu cần các phần tử kế tiếp trong dãy đối tượng cần sắp  Ví dụ  Cho dãy X có 5 số nguyên n=5 như sau  Yêu cầu sắp xếp dãy số theo

Trang 1

CH ƯƠ NG 3

CÁC THU T TOÁN S P X P Ậ Ắ Ế

Trang 2

MỤC TIÊU

Phát biểu bài toán sắp xếp

Phương pháp đổi chỗ liên tiếp

Phương pháp lựa chọn

Phương pháp chèn

Trang 3

Bình Hoàng

An Bình Hoàng Hùng Thắng

21 44 52 73 81

Trang 4

KHÁI NIỆM SẮP XẾP (TT)

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ự mới nhằm thỏa mãn một mục đích.

Mục đích

Giúp việc tìm kiếm được thực hiện nhanh hơn

Sắp thứ tự để in bảng biểu

Trang 5

Đầ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

Trang 7

CÁC THUẬT TOÁN SẮP XẾP HAY GẶP

Ba thuật toán sắp xếp đơn giản

Sắp xếp nổi bọt ( Bubble Sort )

Sắp xếp lựa chọn ( Selection Sort )

Sắp xếp chèn ( Insertion Sort )

Thuật toán sắp xếp phân đoạn ( Quick Sort )

Thuật toán sắp xếp vun đống ( Heap Sort )

Thuật toán sắp xếp trộn ( Merge Sort )

Trang 8

Ý tưởng giải thuật

Dựa vào việc so sánh và đổi chỗ (nếu cần) các phần tử kế tiếp trong dãy đối tượng cần sắp

Ví dụ

Cho dãy X 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

THUẬT TOÁN SẮP XẾP NỔI BỌT

Trang 9

THUẬT TOÁN SẮP XẾP NỔI BỌT

Cách làm : duyệt và so sánh các cặp phần tử kế tiếp của dãy, giả sử là Xj và Xj+1, nếu trái thứ tự thì đổi chỗ

Trang 11

Đến đây ta được hai phần tử đứng đúng vị trí, các phần tử còn lại thì không.

Vậy phải làm mấy lần nữa?

Hai lần nữa, ta được dãy sắp theo chiều tăng dần

Ôi chà… dễ ợt…!

THUẬT TOÁN SẮP XẾP NỔI BỌT

Trang 12

Ví dụ 2:

Cho dãy số sau

Yêu cầu: Minh họa quá trình sắp xếp dãy theo chiều giảm dần dựa vào ý tưởng trên.

THUẬT TOÁN SẮP XẾP NỔI BỌT

Trang 13

Giải thuật

THUẬT TOÁN SẮP XẾP NỔI BỌT

void sort(int X[], int n) {

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

if (X[j]>X[j+1]) {

int tg = X[j]; X[j] = X[j+1]; X[j+1] = tg; }

Trang 14

Ứng dụng

Viết chương trình thực hiện các việc sau

Nhập vào một dãy n số nguyên (0<n<100, n nhập

Trang 15

Bài tập: Viết chương trình thực hiện các việc sau

Nhập vào một danh sách học sinh (0<n<100, n nhập

từ bàn phím), mỗi học sinh gồm các thông tin: Mã học sinh, họ và tên, năm sinh và điểm trung bình.

Sắp xếp danh sách theo chiều tăng dần của tên học sinh bằng thuật toán nổi bọt

In danh sách vừa sắp ra màn hình

Sắp xếp danh sách theo chiều giảm dần của điểm trung bình

In danh sách ra màn hình

Yêu cầu: Mỗi công việc được viết bằng một thủ tục

THUẬT TOÁN SẮP XẾP NỔI BỌT

Trang 16

Ý tưởng giải thuật

Dựa vào thuật toán MAX

Duyệt và tìm phần tử nhỏ nhất của dãy và đổi chỗ phần tử đó cho phần tử đầu dãy.

Cho dãy X 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

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

Trang 17

Cách làm : Chọn phần tử có giá trị nhỏ nhất, giả sử

là Xm, đổi chỗ cho phần tử đầu dãy là Xi

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

Trang 18

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

Trang 19

Ví dụ 2

Cho dãy số nguyên như sau

Yêu cầu: Dựa vào ý tưởng trên, minh họa việc sắp xếp dãy số theo chiều giảm dần

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

Trang 20

Giải thuật

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

void sort(int X[ ], int n) {

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

Trang 21

Ứng dụng

Viết chương trình thực hiện các việc sau

Nhập vào một dãy n số nguyên (0<n<100, n nhập

Trang 22

Bài toán gợi ý tưởng:

Trang 23

Ví dụ

Cho dãy X 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

THUẬT TOÁN SẮP XẾP CHÈN

Trang 24

Bài toán thể hiện ý tưởng:

Cho dãy được sắp tăng dần

Trang 25

Đưa ý tưởng vào bài toán sắp xếp:

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.

Trang 26

Đưa ý tưởng vào bài 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

Trang 29

Ví dụ 2

Cho dãy số nguyên như sau

Yêu cầu: Dựa vào ý tưởng trên, minh họa việc sắp xếp dãy số theo chiều giảm dần

THUẬT TOÁN SẮP XẾP CHÈN

Trang 30

Thực hiện n-1 lần “chia”

dãy thành dãy đích và dãy

nguồn

Mỗi lần chia lấy phần tử

đầu của dãy nguồn (giả sử là

Xi (I=1->N-1)), chèn vào vị trí

thích hợp trong dãy đích

Trang 31

Ứng dụng

Viết chương trình thực hiện các việc sau

Nhập vào một dãy n số nguyên (0<n<100, n nhập

Trang 32

Ý tưởng

Chia để trị:

Chia bài toán thành các bài toán con

Giải quyết các bài toán con

Kỹ thuật đệ quy

Bài toán lớn được giải quyết nhờ việc giải quyết bài toán nhỏ cùng dạng nhưng có kích thước nhỏ hơn

SẮP XẾP PHÂN ĐOẠN - QUICK SORT

Trang 33

Ví dụ

Sắp dãy số nguyên

Bài toán lớn được chia thành ba bài toán con

Trị ba bài toán con theo cách trên

Tổng hợp lời giải ta sẽ có dãy được sắp

QUICK SORT

53 -21 33 68 40 82 31 67 25

Trang 34

Thuật toán cơ sở

QUICK SORT

Quick_sort(S) Begin

If (||S||<=1) then return Else begin

- Chọn phần tử chia t S;

- Chia S thành ba dãy con

S1 = {e S | e<t} S2 = {e S | e=t} S3 = {e S | e>t}

- Quick_sort(S1);

- Quick_sort(S3);

end;

END;

Trang 35

Minh họa thuật toán trên dãy n=9 số nguyên

Trang 36

25 21 31 33 40 82 67 68 53

Trang 37

Làm tương tự với các đoạn S1, và S3 cho đến khi mỗi đoạn chia chỉ còn một phần tử ta có dãy S được sắp

Thiết kế thuật toán:

Mỗi lần chia ta dùng hai biến chỉ số i và j.

i chạy từ trái sang, gặp phần tử không nhỏ hơn phần

tử chia t, i dừng lại

j chạy từ phải sang, gặp phần tử không lớn hơn phần

tử chia t, j dừng lại

nếu i < j đổi chỗ Xi và Xj, i=i+1, j=j-1

Lặp lại quá trình cho đến khi i>j.

QUICK SORT

Trang 39

Ứng dụng

Viết chương trình thực hiện các việc sau

Nhập vào một dãy n số nguyên (0<n<100, n nhập

Ngày đăng: 22/03/2014, 16:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w