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

Phân tích và thiết kế thuật toán _ Thanh Huyền_sptn

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 (405.36 KB, 13 trang )

LOGO

Thuật toán sắp xếp hòa nhập/ hòa lẫn

Merge Sort
Nguyễn Thị Thanh Huyền
Lớp SP Tin K49
Trường ĐHSP Thái Nguyên


MERGE SORT
Sắp xếp hòa nhập/ hòa lẫn

1.
2
3
4
5

ý tưởng
Thuật toán
Ví dụ
Thủ tục
Độ phức tạp

LOGO


1. Ý tưởng
 Sắp xếp trộn (Merge Sort) là một giải thuật sắp xếp dựa trên giải
thuật Chia để trị (Divide and Conquer).


 Để sắp xếp một mảng A[start...end], Chúng ta sẽ chia mảng lớn
thành những mảng con nhỏ hơn bằng cách chia đôi mảng lớn và
chúng ta tiếp tục chia đôi các mảng con cho tới khi mảng con nhỏ
nhất chỉ còn 1 phần tử.

LOGO


1. Ý tưởng
 Sau đó chúng ta sẽ tiến hành so sánh 2 mảng con có cùng mảng cơ
sở (khi chúng ta chia đôi mảng lớn thành 2 mảng con thì mảng lớn
đó chúng ta gọi là mảng cơ sở của 2 mảng con đó) khi so sánh
chúng sẽ vừa sắp xếp vừa ghép 2 mảng con đó lại thành mảng cơ
sở, chúng ta tiếp tục so sánh và ghép các mảng con lại đến khi còn
lại mảng duy nhất thì đó là mảng đã được sắp xếp.

LOGO


2. Thuật toán

 Dãy chỉ gồm 1 phần tử được coi là đã sắp xếp tăng dần.
 Giả sử cần sắp xếp dãy a[i..j] ta quy về việc sắp xếp 2 dãy con
a[i..k] và a[k+1..j] với k nằm ở giữa i và j ( k=(i+j) div 2), sauđó ta
hòa nhập 2 dãy đã được sắp xếp thành dãy được sắp xếp.

LOGO


2. Thuật toán

Thuật toán hòa nhập 2 dãy đã được sắp xếp


Giả sử có 2 dãy được sắp xếp, ta sẽ tìm cách hòa nhập 2 dãy này
lại thành 1 dãy được sắp xếp



Ta sẽ đi so sánh 2 phầntử có giá trị nhỏ nhất của 2 dãy, chọn
phần tử nhỏ hơn đưa ra dãy sắp xếp riêng và loại phần tử đó ra khỏi
dãy chứa nó.



Lặp lại quá trình trên cho đến khi 1 trong 2 dãy hết thì chuyển
dãy còn lại vào đuôi của dãy sắp xếp.

LOGO


3. Ví dụ
Sắp xếp dãy sau theo phương pháp sắp xếp hòa nhập (Merge Sort )
12 2 8 5 1 6 4 15

12

2

8


5

1

6

4

15

LOGO


3. Ví dụ
1

2

2

12

5

8

2

5


6

8

5

8

12

1

12

12

2

4

8

1

5

1

15


4

6

15

4

6

6

4

15

15

LOGO


4. Thủ tục
 Thủ tục hòa nhập 2 dãy con a[i..k] và a[k+1..j]:
Procedure Merge (var a: mang; I,j,k :integer);
Var c: mang ; t, h, i1, j1: Interger;
Begin
i1:=1; j1:= k+1; t:=I;
While (i1<= k ) and ( j1<= j) do
Begin
If a[i1] < a[j1] then

Begin
c[t] := a[i1]; inc (j1);
End
Else
Begin
c[t] := a[j1]; inc a[j1];
End;
inc (t);
End;

www.themegallery.com

LOGO


4. Thủ tục
If i1<= k then
For h:= i1 to k do
Begin
c[t] := a[h]; inc (t);
End;
If j1<= j then
For h:= j1 to j do
Begin
c[t] := a[h]; inc (t);
End;
For t:= i to j do a[t] := c[t];
End;
www.themegallery.com


LOGO


4. Thủ tục


Thủ tục sắp xếp hòa nhập
Procedure MergeSort ( var a: mang; i,j: Integer);
Var k: Integer;
Begin
If i < j then
Begin
k := ( i+j) div 2;
MergeSort ( a, i, k);
MergeSort ( a, k+1, j);
MergeSort ( a, i, k, j);
End;
End;
www.themegallery.com

LOGO


5. Độ phức tạp
 

LOGO


LOGO




×