Thuật toán sắp xếp hòa lẫn merga sort trong Phân tích và thiết kế thuật toánBao gồm: Ý tưởng, thuật toán, ví dụ, thủ tục, độ phức tạp.1. Ý tưởngSắ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 Astart...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ử.
Trang 1Merge Sort
Thuật toán sắp xếp hòa nhập/ hòa lẫn
Nguyễn Thị Thanh Huyền Lớp SP Tin K49
Trường ĐHSP Thái Nguyên
Trang 2ý tưởng
Thuật toán
Ví dụ Thủ tục
Độ phức tạp
1.
2
3
4
5
MERGE SORT
Sắp xếp hòa nhập/ hòa lẫn
Trang 3 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ử
1 Ý tưởng
Trang 4 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
1 Ý tưởng
Trang 5 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
2 Thuật toán
Trang 6Thuậ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
2 Thuật toán
Trang 7Sắ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
3 Ví dụ
12 2 8 5 1 6 4 15
Trang 83 Ví dụ
1 2 4 5 6 8 12 15
Trang 94 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);
Trang 104 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;
Trang 114 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
Trang 125 Độ phức tạp
Trang 13
LOGO