Professional Documents
Culture Documents
Bai 11-2 Merge Sort
Bai 11-2 Merge Sort
Sorting 2
Ví dụ: Trộn hai dãy sau
A … 1 3 24 4 21 54 …
i k k+1 j
Sorting 3
Thuật toán trộn
• Sử dụng hai biến left, right, t và sử dụng mảng phụ B[i],..,B[j]. left xuất phát từ
i, right xuất phát từ k+1, t xuất phát tử i trên mảng phụ B.
• Nếu A[left].key<A[right].key thì B[t]A[left], t t+1 và leftleft+1
• Nếu A[left].keyA[right].key thì B[t]A[right], t t+1 và rightright+1
• Quá trình trên được thực hiện cho đến khi left>k hoặc right>j thì dừng lại.
•Nếu left>k thì B[t]A[right],..,B[j]A[j].
• Nếu right>j thì B[t]A[left], B[t+1]A[letf+1],.., B[t+k-left]A[k].
• Gán A[i] B[i], .., A[j] B[j]
Sorting 4
Ví dụ mô tả Quá trình trộn dãy
Left=i Right=k+1
A … 1 3 24 4 21 54 …
i k j
B … 1 …
t=i
Left=i+1 Right=k+1
… 1 3 24 4 21 54 …
A
i k j
B … 1 3 …
t=i+1
Sorting 5
Ví dụ mô tả Quá trình trộn dãy
Left=i+2 Right=k+1
… 1 3 24 4 21 54 …
A
i k j
B … 1 3 4 ..
t=i+2
Left=i+2 Right=k+2
… 1 3 24 4 21 54 …
A
i k j
B … 1 3 4 21 …
t=i+3
Left=i+2 Right=k+3
… 1 3 24 4 21 54 …
A
i k j
… 1 3 4 21 24 …
B 6
t=i+4
Ví dụ mô tả Quá trình trộn dãy
Left=i+3 Right=k+3
… 1 3 24 4 21 54 …
A
i k j
B … 1 3 4 21 24 54 …
t=i+5
… 1 3 4 21 24 54 …
A
i k j
B … 1 3 4 21 24 54 …
Sorting 7
Thuật toán giả mã
Algorithm Merge(array A, int i, int k, int j) If left>k then
Input: Hai dãy A[i],..,A[k] và A[k+1],..,A[j] đã for rright to j do
được sắp và các số nguyên i, j B[t] A[r];
Output: Dãy A[i],..,A[j] cũng được sắp t++;
left i; rightk+1; t i; else
for r left to k do
While (left≤k) and (right≤j) do
B[t] A[r];
if A[left].key<A[right].key then t++;
B[t] A[left]; for r i to j do
left left+1; A[r] B[r] ;
t t+1;
else
B[t] A[right];
right right+1;
t t+1 ; //kết thúc while
Sorting 8
Thuật toán sắp xếp trộn
Sorting 9
Thuật toán giả mã
Sorting 10
Mô tả quá trình thực hiện sắp xếp
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6
7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 11
Mô tả quá trình thực hiện sắp xếp
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9 3 8 6 1 1 3 8 6
7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 12
Mô tả quá trình thực hiện sắp xếp
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9 3 8 6 1 1 3 8 6
722 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 13
Mô tả quá trình thực hiện sắp xếp
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9 3 8 6 1 1 3 8 6
722 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 14
Mô tả quá trình thực hiện sắp xếp
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9 3 8 6 1 1 3 8 6
722 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 15
Mô tả quá trình thực hiện sắp xếp
Trộn merge(A,1,1,2)
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9 3 8 6 1 1 3 8 6
722 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 16
Mô tả quá trình thực hiện sắp xếp
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9 3 8 6 1 1 3 8 6
722 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 17
Mô tả quá trình thực hiện sắp xếp
Trộn merge(A,1,2,4)
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9 3 8 6 1 1 3 8 6
722 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 18
Mô tả quá trình thực hiện sắp xếp
7 29 4 2 4 7 9 3 8 6 1 1 3 6 8
722 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 19
Mô tả quá trình thực hiện sắp xếp
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9 3 8 6 1 1 3 6 8
722 7 9 4 4 9 3 8 3 8 6 1 1 6
Sorting 20
Thời gian chạy của thuật toán
Chiều cao h của cây merge-sort là O(log n)
– Tại mỗi bước gọi đệ qui ta chia dãy cần sắp thành hai phần,
Thời tổng thời gian làm việc trên các nút ở mức i nhiều nhất là O(n)
– Chúng ta chia và trộn 2i chuỗi có kích thước là n/2i
– Chúng ta gọi 2i+1 lần đệ qui
Vì vậy, tổng thời gian chạy của thuật toán mergesort là O(n log n)
1 2 n/2
i 2i n/2i
… … …
Sorting 21
Hết
Sorting 22