1. Trang chủ
  2. » Giáo án - Bài giảng

cấu trúc dữ liệu chương 6

30 147 0

Đ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 30
Dung lượng 273,91 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

tài liệu uy tín được biên soạn bởi giảng viên đại học Bách Khoa TPHCM, thuận lợi cho qua trình tự học, nghiên cứu bộ tự động hóa, điện tử, cơ điện tử, cơ khí chế tạo máy, lập trình nhúng, Tài liệu được kiểm duyệt bởi giảng viên, phòng đào tạo trường đại học bách khoa, lưu hành nội bộ

Trang 1

Chương 6 Sắp thứ tự

Trang 3

™ Sắp thứ tự các phần tử a1, a2, …, an

hoán vị các phần tử này thành một dãy ak1,

ak2, …, akn sao cho với một hàm thứ tự f cho trước sẽ thỏa mãn:

f(ak1) α f(ak2) α … α f(akn) trong đó quan hệ α là một quan hệ thứ tự

toàn phần.

Định nghĩa sắp thứ tự

Trang 4

™ Sắp thứ tự nội

f internal sorting

đưa vào trong bộ nhớ chính.

™ Sắp thứ tự ngoại

f external sorting

vào trong bộ nhớ chính, phần dữ liệu còn lại được lưu trữ trên bộ nhớ ngoài.

f Còn được gọi là sắp thứ tự tập tin.

Phân loại sắp thứ tự

Trang 5

™ Các phương pháp xen vào (Insertion)

f Xen vào trực tiếp (Straight Insertion)

™ Các phương pháp chọn lựa (Selection)

f Chọn lựa trực tiếp (Straight Selection)

™ Các phương pháp đổi chỗ (Exchange)

f Nổi bọt (Bubble Sort)

Các phương pháp sắp thứ tự nội

Trang 6

™ Phương pháp

f Bước 1: Cho i = 2

f Bước 2: Xét dãy đã có thứ tự tăng dần a 1 , a 2 ,

…, a i-1 Xen a i vào dãy này sao cho dãy sau khi xen vào có thứ tự tăng dần.

f Bước 3: Cho i tăng lên 1 Nếu i > n thì kết

thúc, ngược lại đến Bước 2.

Phương pháp xen vào trực tiếp

Trang 8

var a: array [0 n] of integer;

end end ;

Phương pháp xen vào trực tiếp

Trang 9

Phương pháp chọn lựa trực tiếp

™ Phương pháp

f Bước 1: Cho i = 1

f Bước 2: Xét dãy a i , a 2 , …, a n Tìm a k nhỏ nhất

trong dãy này; đổi chỗ a i với a k

f Bước 3: Cho i tăng lên 1 Nếu i = n thì kết

thúc, ngược lại đến Bước 2.

Trang 10

Phương pháp chọn lựa trực tiếp

Trang 11

var a: array [1 n] of integer;

Phương pháp chọn lựa trực tiếp

Trang 12

f Bước 2: Xét từ cuối dãy a i , a 2 , …, a n về đầu

dãy: nếu a j-1 > a j thì đổi chỗ a j-1 với a j

f Bước 3: Cho i tăng lên 1 Nếu i = n thì kết

thúc, ngược lại đến Bước 2.

Trang 15

Phương pháp nổi bọt

™ Phương pháp nổi bọt có cờ

f Bước 1: Cho flag = true và k = 1

f Bước 2: Cho flag = false Xét từ đầu dãy a 1 ,

a 2 , …, a n-k về cuối dãy: nếu a i > a i+1 thì đổi chỗ

a i với a i+1 và cho flag = true.

f Bước 3: Cho k tăng lên 1 Nếu flag = false thì

kết thúc, ngược lại đến Bước 2.

Trang 18

f Bước 3: Cho i chạy từ đầu dãy và j chạy từ

cuối dãy Phân chia a q , …, a r sao cho dãy a q ,

…, a j ≤ x và dãy a i , …, a r ≥ x bằng cách hoán

đổi a i ( ≥ x) với a j ( ≤ x).

f Bước 4: Nếu q < j thì cho r = j và đến Bước 2

Nếu i < r thì cho q = i và đến Bước 2.

Trang 20

f Đối với dãy a 1 , a 2 ,…, a n thì dãy con a j , a j+1 ,…,

a n với j = [n / 2] + 1 được xem là một đống.

a k

a 2k+1

a 2k

Trang 29

i := q; j := 2 * i; x := a[i]; cont := true;

while (j <= r) and cont do

begin

if j < r then

if a[j] > a[j+1] then j := j + 1;

if x <= a[j] then cont := false

else begin

a[i] := a[j]; i := j; j := 2 * i

end end ;

a[i] := x

end ;

Ngày đăng: 03/02/2018, 08:23