Chào ace, bài này chúng ta sẽ tìm hiểu về một trong số thuật toán bố trí được áp dụng nhiều trong lập trình và thực tế nhất chính là Merge Sort, sau đây h3qvn.com sẽ reviews và chia sẻ chi tiết(khái niệm, vận dụng của nó, code ví dụ, điểm mạnh, điểm yếu…) về Merge Sort thông qua những phần sau.
Bạn đang xem: Thuật toán merge sort c++
1. Giới thiệu
Giống như QuickSort, Merge Sort là 1 trong thuật toán chia và Chinh phục. Nó phân tách mảng đầu vào thành nhì nửa, gọi chính nó mang đến hai nửa và tiếp đến hợp độc nhất hai nửa đã sắp xếp. Hàm merge () được áp dụng để hợp nhất hai nửa. Hợp độc nhất (arr, l, m, r) là quá trình đặc biệt quan trọng giả định rằng arr
MergeSort (arr <>, l, r)Nếu r> l 1. Tra cứu điểm thân để chia mảng thành nhị nửa: Ở giữa m = (l + r) / 2 2. Hợp tốt nhất cuộc gọi sắp xếp cho nửa đầu: điện thoại tư vấn mergeSort(arr, l, m) 3. Hợp tốt nhất cuộc gọi sắp xếp cho nửa sau: call mergeSort(arr, m + 1, r) 4. Hợp độc nhất vô nhị hai nửa được sắp xếp ở cách 2 cùng 3: call merge(arr, l, m, r)Sơ đồ sau đây từ wikipedia cho thấy thêm quy trình thu xếp hợp nhất hoàn chỉnh cho một mảng ví dụ 38, 27, 43, 3, 9, 82, 10. Nếu họ xem xét kỹ hơn sơ đồ, chúng ta cũng có thể thấy rằng mảng được phân chia đệ quy làm hai nửa cho đến khi kích cỡ trở thành 1. Khi size trở thành 1, các quy trình hợp độc nhất sẽ vận động và ban đầu hợp nhất những mảng trở lại cho tới khi mảng hoàn hảo đã phù hợp nhất.
Xem thêm: Top 6 Game Đua Xe Hay Nhất Cho Máy Tính, Điện Thoại 2021, Top Game Đua Xe Hay Nhất Cho Pc Và Console
Hình ảnh minh hoạ
2. Code lấy ví dụ trên các ngôn ngữ
C++
// C++ program for Merge Sort #include using namespace std; // Merges two subarrays of arr<>. // First subarray is arr
/* C program for Merge Sort */#include #include // Merges two subarrays of arr<>. // First subarray is arr
/* Java program for Merge Sort */class MergeSort { // Merges two subarrays of arr<>. // First subarray is arr
# Python program for implementation of MergeSort def mergeSort(arr): if len(arr) >1: mid = len(arr)//2 # Finding the mid of the array L = arr<:mid> # Dividing the array elements R = arr
Given array is12 11 13 5 6 7Sorted array is5 6 7 11 12 13
3. Độ phức tạp
Độ tinh vi về thời gian: Sắp xếp các mảng trên các máy khác nhau. Merge Sort là một trong thuật toán đệ quy với độ phức hợp thời gian hoàn toàn có thể được biểu thị như sau.T (n) = 2T (n / 2) + θ (n)Sự lặp lại trên có thể được giải quyết bằng phương pháp sử dụng phương thức tree lặp lại hoặc cách thức Master. Nó phía bên trong trường hòa hợp II của phương pháp Master với nghiệm của sự việc tái diễn là θ (nLogn). Độ tinh vi thời gian của bố trí hợp nhất(Merge Sort) là θ (nLogn) vào cả 3 trường hợp (xấu nhất, vừa đủ và xuất sắc nhất) vì bố trí hợp nhất luôn luôn chia mảng thành hai nửa với mất thời gian tuyến tính nhằm hợp tốt nhất hai nửa.
Không gian phụ trợ: O (n)
Mô hình thuật toán: phân chia và Chinh phục
Ổn định: Có
4. Ứng dụng
Merge Sort rất hữu ích để sắp đến xếp những danh sách được links trong thời gian O (nLogn). Vào trường hợp danh sách được liên kết, trường hòa hợp này khác nhau chủ yếu vì chưng sự khác biệt trong phân bổ bộ nhớ lưu trữ của mảng và list được liên kết. Không giống như mảng, các nút danh sách liên kết rất có thể không liền kề trong cỗ nhớ. Không giống như một mảng, trong danh sách liên kết, bạn cũng có thể chèn những mục vào giữa trong O (1) không gian thừa với O (1) thời gian. Do đó vận động hợp tuyệt nhất của sắp xếp hợp nhất có thể được thực hiện mà không tồn tại thêm dung lượng cho danh sách được liên kết. Vào mảng, chúng ta cũng có thể thực hiện truy cập ngẫu nhiên khi các bộ phận nằm kề nhau trong bộ nhớ. Mang sử bọn họ có một mảng A số nguyên (4 byte) cùng đặt add của A <0> là x thì để truy cập A , chúng ta cũng có thể truy cập trực tiếp vào bộ nhớ lưu trữ tại (x + i * 4). Không y như mảng, họ không thể triển khai truy cập tình cờ trong danh sách liên kết. Thu xếp nhanh yêu thương cầu không ít loại tầm nã cập. Trong danh sách links để truy vấn chỉ mục trang bị i, họ phải di chuyển từng nút từ đầu đến nút máy i vì bọn họ không có khối bộ nhớ liên tục. Vì đó, túi tiền tăng đối với nhanh chóng. Sắp xếp hợp nhất truy cập dữ liệu một giải pháp tuần từ và yêu cầu truy cập tự nhiên thấp.Vấn đề hòn đảo ngược số lượngĐược áp dụng trong sắp xếp bên ngoàiNguồn cùng Tài liệu giờ anh tham khảo:
Tài liệu trường đoản cú h3qvn.com:
Nếu các bạn thấy hay với hữu ích, chúng ta cũng có thể tham gia các kênh sau của h3qvn.com để nhận được rất nhiều hơn nữa: