http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Giải thuật xếp trộn (Merge Sort) Giải thuật xếp trộn (Merge Sort) ? Sắp xếp trộn (Merge Sort) giải thuật xếp dựa giải thuật Chia để trị (Divide and Conquer) Với độ phức tạp thời gian trường hợp xấu Ο(n log n) giải thuật đáng quan tâm Đầu tiên, giải thuật xếp trộn chia mảng thành hai nửa sau kết hợp chúng lại với thành mảng xếp Cách giải thuật xếp trộn (Merge Sort) làm việc Dưới hình minh họa cách giải thuật xếp trộn làm việc Giả sử có mảng sau: Đầu tiên, giải thuật xếp trộn chia toàn mảng thành hai nửa Tiến trình chia tiếp tục diễn khơng chia thu giá trị tương ứng biểu diễn phần tử mảng Trong hình dưới, chia mảng kích cỡ thành hai mảng kích cỡ Tiến trình chia khơng làm thay đổi thứ tự phần tử mảng ban đầu Bây tiếp tục chia mảng thành nửa Tiến hành chia tiếp khơng chia http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Bây tổ hợp chúng theo cách thức mà chúng chia Đầu tiên so sánh hai phần tử list sau tổ hợp chúng vào list khác theo cách thức xếp Ví dụ, 14 33 vị trí xếp Chúng ta so sánh 27 10 list khác đặt 10 đầu sau 27 Tương tự, thay đổi vị trí 19 35 42 44 đặt tương ứng Vòng lặp để kết hợp cặp list Chúng ta so sánh giá trị sau hợp chúng lại vào list chứa giá trị, giá trị thứ tự Sau bước kết hợp cuối cùng, danh sách trông giống sau: Phần tìm hiểu số khía cạnh khác giải thuật xếp trộn Giải thuật cho Sắp xếp trộn (Merge Sort) Giải thuật xếp trộn tiếp tục tiến trình chia danh sách thành hai nửa chia Theo định nghĩa, list mà có phần tử list coi xếp Sau đó, giải thuật xếp trộn kết hợp sorted list lại với để tạo thành list mà xếp Bước 1: Nếu có phần tử list list xem xếp Trả list hay giá trị Bước 2: Chia list cách đệ qui thành hai nửa chia Bước 3: Kết hợp list nhỏ (đã qua xếp) thành list (cũng xếp) Giải thuật mẫu cho Sắp xếp trộn (Merge Sort) Có thể nói với giải thuật xếp trộn, bạn cần ý hai điểm chính: chia hợp http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Bởi giải thuật xếp trộn làm việc theo phương thức đệ qui nên phần triển khai giải thuật nên sử dụng đệ qui để biểu diễn Bắt đầu giải thuật xếp trộn mergesort( biến a mảng ) if ( n == ) return a khai báo biến l1 mảng = a[0] a[n/2] khai báo biến l2 mảng = a[n/2+1] a[n] l1 = mergesort( l1 ) l2 = mergesort( l2 ) return merge( l1, l2 ) // gọi hàm merge() Kết thúc giải thuật Bắt đầu hàm merge( Mảng a, mảng b ) khai báo biến c mảng while ( a b có phần tử ) if ( a[0] > b[0] ) Thêm b[0] vào cuối mảng c Xóa b[0] từ b else Thêm a[0] vào cuối mảng c Xóa a[0] từ a kết thúc if kết thúc while while ( a có phần tử ) Thêm a[0] vào cuối mảng c Xóa a[0] từ a kết thúc while while ( b có phần tử ) Thêm b[0] vào cuối mảng c Xóa b[0] từ b kết thúc while return c Kết thúc hàm Để theo dõi code đầy đủ giải thuật xếp trộn ngôn ngữ C, mời bạn click chuột vào chương: Sắp xếp trộn (Merge Sort) C http://vietjack.com/ Trang chia sẻ các bài học online miễn phí ...http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va- giai- thuat/ index.jsp Copyright... sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va- giai- thuat/ index.jsp Copyright