Giải thuật và lưu đồ của thuật toán merge sort
Chào ace, bài này chúng ta sẽ tìm hiểu về một trong các thuật toán sắp xếp được sử dụng nhiều trong lập trình và thực tế nhất đó là Merge Sort, sau đây cafedev sẽ giới thiệu và chia sẻ chi tiết(khái niệm, ứng dụng của nó, code ví dụ, điểm mạnh, điểm yếu…) về Merge Sort thông qua các phần sau. Nội dung chính Giống như QuickSort, Merge Sort là một thuật toán Chia và Chinh phục. Nó chia mảng đầu vào thành hai nửa, gọi chính nó cho hai nửa và sau đó hợp nhất hai nửa đã sắp xếp. Hàm merge () được sử dụng để hợp nhất hai nửa. Hợp nhất (arr, l, m, r) là quá trình quan trọng giả định rằng arr [l..m] và arr [m + 1..r] được sắp xếp và hợp nhất hai mảng con đã sắp xếp thành một. Xem cách triển khai C sau để biết thêm chi tiết.
// C++ program for Merge Sort includeusing namespace std; // Merges two subarrays of arr[]. // First subarray is arr[l..m] // Second subarray is arr[m+1..r] void merge(int arr[], int l, int m, int r) { }
// l is for left index and r is
// right index of the sub-array
// of arr to be sorted */
void mergeSort(int arr[], int l, int r)
{ }
// UTILITY FUNCTIONS
// Function to print an array
void printArray(int A[], int size)
{ }
// Driver code
int main()
{ }
/ C program for Merge Sort / include
include // Merges two subarrays of arr[]. // First subarray is arr[l..m] // Second subarray is arr[m+1..r] void merge(int arr[], int l, int m, int r) { }
/ l is for left index and r is right index of the
sub-array of arr to be sorted /
void mergeSort(int arr[], int l, int r)
{ }
/ UTILITY FUNCTIONS /
/ Function to print an array /
void printArray(int A[], int size)
{ }
/ Driver program to test above functions /
int main()
{ }
/ Java program for Merge Sort /
class MergeSort { }
Python program for implementation of MergeSortdef mergeSort(arr): # Code to print the list
def printList(arr): # driver code to test the above code
if name == 'main':
` Kết quả
3. Độ phức tạpĐộ phức tạp 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 thuật toán đệ quy và độ phức tạp thời gian có thể được biểu thị như sau.
Sự lặp lại trên có thể được giải quyết bằng cách sử dụng phương pháp tree lặp lại hoặc phương pháp Master. Nó nằm trong trường hợp II của Phương pháp Master và nghiệm của sự tái diễn là θ (nLogn). Độ phức tạp thời gian của Sắp xếp hợp nhất(Merge Sort) là θ (nLogn) trong cả 3 trường hợp (xấu nhất, trung bình và tốt nhất) vì sắp xếp hợp nhất luôn chia mảng thành hai nửa và mất thời gian tuyến tính để hợp nhất hai nửa. Không gian phụ trợ: O (n) Mô hình thuật toán: Chia và Chinh phục Ổn định: Có 4. Ứng dụng
Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa: |