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

Chương 3: Giải thuật sắp xếp (SelectionSort,InsertSort..)

28 529 1
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Sắp xếp
Tác giả GV. Vũ Thị Thúy Vi
Trường học Trường CĐCĐ Sóc Trăng
Thể loại Bài giảng
Năm xuất bản 2008
Thành phố Sóc Trăng
Định dạng
Số trang 28
Dung lượng 728,5 KB

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

Nội dung

Chương 3: SẮP XẾPGV.. n đối tượngCác giải thuật này thường chỉ dùng để sắp các danh sách có ít đối tượng... 3.1 Bài toán sắp xếp Tầm quan trọng của bài toán sắp xếp... 3.1 Bài toán sắp

Trang 1

Chương 3: SẮP XẾP

GV Vũ Thị Thúy Vi

Trang 2

n đối tượng

Các giải thuật này thường chỉ dùng để sắp các danh sách có ít đối tượng.

Trang 3

3.1 Bài toán sắp xếp

 Tầm quan trọng của bài toán sắp xếp

Trang 4

3.1 Bài toán sắp xếp

Trang 5

3.1 Bài toán sắp xếp

Tổ chức dữ liệu và ngôn ngữ cài đặt

Trang 6

3.1 Bài toán sắp xếp Sắp xếp trong Sắp xếp ngoài

là sự sắp xếp dữ liệu được tổ

chức trong bộ nhớ trong của

máy tính, ở đó ta có thể sử

dụng khả năng truy nhập ngẫu

nhiên của bộ nhớ và do vậy sự

thực hiện rất nhanh

là sự sắp xếp được sử dụng khi

số lượng đối tượng cần sắp xếp lớn không thể lưu trữ trong bộ nhớ trong mà phải lưu trữ trên bộ nhớ ngoài Cụ thể là ta

sẽ sắp xếp dữ liệu được lưu trữ trong các tập tin

Trang 7

INPUT: Số nguyên dương n và dãy n số

nguyên a1, a2, …, an (ai với i: 1n).

OUTPUT: Dãy n số nguyên a1, a2, …, an đã

được sắp xếp theo thứ tự tăng dần.

Xác định bài toán sắp xếp

Trang 9

từ a[4] đến a[6]1 3 5 1 3 5 7 8 9 7 7 9 8 8 và hoán vị nó với phần tử a[4]

B5 chọn phần tử có khóa nhỏ nhất trong 2 phần tử từ a[5] đến a[6]

và hoán vị nó với phần tử a[5]

Trang 10

Chọn phần tử có khóa nhỏ nhất trong n-i+1 phần tử

từ a[i] đến a[n] và hoán vị nó với phần tử a[i]

Bi

Sau n-1 bước này thì mảng đã được sắp xếp

Trang 12

Phân tích đánh giá giải thuật sắp xếp chọn

 Lệnh {6}thủ tục Swap lấy O(1) thời gian

vì chỉ thực hiện 3 lệnh gán nối tiếp nhau.

{1} FOR i := 1 TO n-1 DO BEGIN

n 1

) 2 n ( ) 1 n ( ) i n

1 n

Trang 13

Bài tập

Câu 1: Hãy trình bày giải thuật sắp xếp chọn trên

dãy số nguyên A gồm 8 số nguyên sau:

Trang 14

3 5 9 8 1 7

Sắp xếp một dãy số nguyên A gồm 6 số nguyên sau:

B1

3.3 Sắp xếp xen Giải thuật và Ví dụ minh họa

Xem phần tử a[1] là một dãy đã có thứ tự

3

B2

Xen phần tử a[2] vào danh sách đã có thứ tự a[1] sao

cho a[1], a[2] là một danh sách có thứ tự.

5

B3

Xen phần tử a[3] vào danh sách đã có thứ tự a[1], a[2]

sao cho a[1], a[2], a[3] là một danh sách có thứ tự.

9

B4

Xen phần tử a[4] vào danh sách đã có thứ tự a[1], a[2],

a[3] sao cho a[1], a[2], a[3], a[4] là một danh sách có thứ

Trang 15

Tóm tắt giải thuật sắp xếp xen

Xen phần tử a[2] vào danh sách đã có thứ tự a[1] sao

cho a[1], a[2] là một danh sách có thứ tự

B1

B2

Bi

 Sau n-1 bước này thì mảng đã được sắp xếp

Trước hết ta xem phần tử a[1] là một dãy đã có thứ tự

Xen phần tử a[3] vào danh sách đã có thứ tự a[1], a[2]

sao cho a[1], a[2], a[3] là một danh sách có thứ tự

Xen phần tử a[i+1] vào danh sách đã có thứ tự a[1],

a[2],…,a[i] sao cho a[1], a[2], …, a[i+1] là một danh

sách có thứ tự

Trang 16

{5} j:=j-1;

End;

END;

Trang 17

Phân tích đánh giá giải thuật sắp xếp chọn

1} FOR i := 2 TO n DO BEGIN

{3} While(j>1)and(a[j]<a[j-1])do

Begin {4} Swap(a[j],a[j-1]);

 Lệnh {3} vòng lặp chạy nhiều nhất i-1 lần,

mỗi lần tốn O(1), nên {3} lấy i-1 thời gian.

n )

1 n (

2 1 ) 1 i

n

2 i

Trang 18

3.4 Sắp xếp nổi bọt

1

8 5 6

3 9

Trang 19

Giải thuật và Ví dụ minh họa

1 9

Sắp xếp một dãy số nguyên A gồm

6 số nguyên như hình trên

Xét các phần tử từ a[6] đến a[2], với mỗi phần tử a[j], so

sánh khoá của nó với khoá của phần tử a[j-1] đứng ngay

trước nó Nếu khoá của a[j] nhỏ hơn khoá của a[j-1] thì

hoán đổi a[j] và a[j-1] cho nhau

B1

3 8 6 5

Xét các phần tử từ a[6] đến a[3], với mỗi phần tử a[j], so

sánh khoá của nó với khoá của phần tử a[j-1] đứng ngay

trước nó Nếu khoá của a[j] nhỏ hơn khoá của a[j-1] thì

hoán đổi a[j] và a[j-1] cho nhau

B2

9

8 6 5

9 8 6 5

3 1B3

B3 Xét các phần tử từ a[6] đến a[4], với mỗi phần tử a[j], so

sánh khoá của nó với khoá của phần tử a[j-1] đứng ngay

trước nó Nếu khoá của a[j] nhỏ hơn khoá của a[j-1] thì

hoán đổi a[j] và a[j-1] cho nhau

5

B4

B4

So sánh khoá khoá của phần tử a[6] với khóa của phần

tử a[5] Nếu khoá của a[6] nhỏ hơn khoá của a[5] thì hoán

đổi a[6] và a[5] cho nhau

9 8 6

3

1

5 6

B5

B5

9 8

3

1

5 6 8

Xét các phần tử từ a[6] đến a[5], với mỗi phần tử a[j], so

sánh khoá của nó với khoá của phần tử a[j-1] đứng ngay

trước nó Nếu khoá của a[j] nhỏ hơn khoá của a[j-1] thì

hoán đổi a[j] và a[j-1] cho nhau

Sau 5 bước dãy số A đã được sắp xếp đúng thứ tự

Trang 20

Tóm tắt giải thuật sắp xếp chọn

Xét các phần tử từ a[n] đến a[2] , với mỗi phần tử

a[j], so sánh khoá của nó với khoá của phần tử a[j-1]

đứng ngay trước nó Nếu khoá của a[j] nhỏ hơn

khoá của a[j-1] thì hoán đổi a[j] và a[j-1] cho nhau

B1

B2

Sau n-1 bước này thì mảng đã được sắp xếp

Xét các phần tử từ a[n] đến a[3] , và làm tương tự

như trên.

Trang 21

{2} FOR j := n DOWNTO i+1 DO

{3} IF a[j] <a[j-1] THEN

{4} Swap(a[j],a[j-1]);

END;

Trang 22

Phân tích đánh giá giải thuật sắp xếp nổi bọt

{1} FOR i := 1 TO n-1 DO {2} FOR j:=n DOWNTO i+1 DO {3} IF a[j]<a[j-1] DO {4} Swap(a[j],a[j-1]);

) 2 n ( ) 1 n ( ) i n

1 n

1 i

Trang 23

3.5 Quicksort

2

3 3 3 3 3

3

Lưu ý: Một mảng chỉ gồm một phần tử hoặc gồm

nhiều phần tử có khóa bằng nhau thì đã có thứ tự

Giải thuật và Ví dụ minh họa Sắp xếp một dãy số nguyên A gồm 8 số nguyên sau:

Ta có L > R nên ta đã xác định được điểm

phân họach ứng với L=4.

3 4 1 8 9 5 6 7

Trang 24

Mảng đã cho được phân thành 2 mảng con

3 4 1 8 9 5 6 7

v=4 v=4

Trang 25

Tóm tắt giải thuật Quicksort

Ðể sắp xếp mảng a[i] a[n] ta tiến hành các bước sau: B1

Trang 26

Chương trình

Type Mang=Array[1 100] of Integer;

Function chot(a: Mang; i, n: Integer): Integer;

Var k, phantudau,chisochot: Integer;

Begin {1} k:=i+1;

{2} phantudau:=a[i];

{3} while(k<=n)and(a[k]=phantudau) do {4} k:=k+1;

{5} if(k>n) then {6} chisochot:=0;

else {7} if(a[k]>phantudau) then {8} chisochot:=k;

Trang 27

FUNCTION Phanhoach(a: Mang; i,n,chot:integer): integer;

VAR L,R, tam : integer;

BEGIN

{1} L := i; {Ðặt con nháy L ở cực trái}

{2} R := n; {Ðặt con nháy R ở cực phải}

{3} WHILE L <= r DO

BEGIN

{L tiến sang phải}

{4} WHILE a[L] < chot DO L := L+1;

{R tiến sang trái}

{5} WHILE a[R]>= chot DO R := R-1;

Trang 28

PROCEDURE Quicksort(a: Mang; i,n:integer);

VAR chot, vitrichot, k : integer;

BEGIN

vitrichot:= chot(a,i,n);

IF vitrichot <> 0 THEN begin

Chương trình Phân tích đánh giá giải thuật

Quicksort lấy O(nlogn) thời gian để sắp xếp n phần tử trong

Ngày đăng: 08/07/2013, 01:26

TỪ KHÓA LIÊN QUAN

w