tailieunhanh - Sắp xếp trộn
Trộn Trực tiếp Giải thuật trộn trực tiếp là phương pháp trộn đơn giản nhất. Việc phân hoạch thành các dãy con đơn giản chỉ là tách dãy gồm n phần tử thành n dãy con. Ðòi hỏi của thuật toán về tính có thứ tự của các dãy con luôn được thỏa trong cách phân hoạch này vì dãy gồm một phân tử luôn có thứ tự. | Sắp xếp trộn mergesort Tư tưởng trộn Có 2 mảng đã được sắp xếp chiều dài N,M Tạo ra 1 mảng chung được sắp xếp 2 5 7 8 9 10 13 14 1 4 6 11 20 1 2 1 3 3 4 5 6 7 8 9 10 11 13 14 20 Bước 1: chọn min của 2 phần tử đầu dãy chép qua mảng kết quả Bước 2: hủy phần tử min Bước 3: nếu chưa đến cuối mảng trở về bước 1 Nếu đến cuối mảng: chép phần còn lại của mảng kia vào mảng kết quả 2 5 7 8 9 10 13 14 1 4 6 11 20 3 i=0 j=0 1 2 5 7 8 9 10 13 14 4 6 11 20 3 i=0 1 j=1 2 1 5 7 8 9 10 13 14 4 6 11 20 3 i=1 1 j=1 2 3 1 2 5 7 8 9 10 13 14 4 6 11 20 i=1 1 j=2 2 3 4 1 2 3 Thực hiện lần lượt 5 7 8 9 10 13 14 6 11 20 i=1 1 j=3 2 3 4 1 2 3 4 14 20 J=5 1 j=7 i=8 2 3 4 5 6 7 8 9 10 11 13 14 5 7 8 9 10 13 4 6 11 1 2 3 Chép phần còn lại của mảng 2 20 J=5 1 i=8 2 3 4 5 6 7 8 9 10 11 13 14 20 j=6 A,b, kq i=j=0 While (i+j Sắp xếp bằng phương pháp mergesort Nguyên tắc sắp xếp bằng phép trộn Ðể sắp xếp dãy a1, a2, ., an, giải thuật Merge Sort dựa trên nhận xét sau: Mỗi dãy a1, a2, ., an bất kỳ đều có thể coi như là một tập hợp các dãy con liên tiếp mà mồi dãy con đều đã có thứ tự. Ví dụ dãy 12, 2, 8, 5, 1, 6, 4, 15 có thể coi như gồm 5 dãy con không giảm (12); (2, 8); (5); (1, 6); (4, 15). Dãy đã có thứ tự coi như có 1 dãy con. một cách tiếp cận để sắp xếp dãy là tìm cách làm giảm số dãy con không giảm của nó. Ðây chính là hướng tiếp cận của thuật toán sắp xếp theo phương pháp trộn. Trong phương pháp Merge sort, mấu chốt của vấn đề là cách phân hoạch dãy ban đầu thành các dãy con. Sau khi phân hoạch xong, dãy ban đầu sẽ được tách ra thành 2 dãy phụ theo nguyên tắc phân phối đều luân phiên. Trộn từng cặp dãy con của hai dãy phụ thành một dãy | Sắp xếp trộn mergesort Tư tưởng trộn Có 2 mảng đã được sắp xếp chiều dài N,M Tạo ra 1 mảng chung được sắp xếp 2 5 7 8 9 10 13 14 1 4 6 11 20 1 2 1 3 3 4 5 6 7 8 9 10 11 13 14 20 Bước 1: chọn min của 2 phần tử đầu dãy chép qua mảng kết quả Bước 2: hủy phần tử min Bước 3: nếu chưa đến cuối mảng trở về bước 1 Nếu đến cuối mảng: chép phần còn lại của mảng kia vào mảng kết quả 2 5 7 8 9 10 13 14 1 4 6 11 20 3 i=0 j=0 1 2 5 7 8 9 10 13 14 4 6 11 20 3 i=0 1 j=1 2 1 5 7 8 9 10 13 14 4 6 11 20 3 i=1 1 j=1 2 3 1 2 5 7 8 9 10 13 14 4 6 11 20 i=1 1 j=2 2 3 4 1 2 3 Thực hiện lần lượt 5 7 8 9 10 13 14 6 11 20 i=1 1 j=3 2 3 4 1 2 3 4 14 20 J=5 1 j=7 i=8 2 3 4 5 6 7 8 9 10 11 13 14 5 7 8 9 10 13 4 6 11 1 2 3 Chép phần còn lại của mảng 2 20 J=5 1 i=8 2 3 4 5 6 7 8 9 10 11 13 14 20 j=6 A,b, kq i=j=0 While (i+j
đang nạp các trang xem trước