Merge sort là gì

Chào ace, bài này bọn họ đã tò mò về một trong những thuật tân oán bố trí được sử dụng nhiều vào thiết kế cùng thực tế độc nhất vô nhị chính là Merge Sort, dưới đây gamesbaidoithuong.com vẫn giới thiệu và chia sẻ bỏ ra tiết(tư tưởng, ứng dụng của chính 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: Merge sort là gì


1. Giới thiệu

Giống như QuickSort, Merge Sort là một trong những thuật tân oán Chia với Chinh phục. Nó phân tách mảng đầu vào thành hai nửa, Điện thoại tư vấn chủ yếu nó cho nhì nửa với kế tiếp phù hợp độc nhất nhị nửa vẫn bố trí. Hàm merge () được áp dụng nhằm hòa hợp duy nhất nhì nửa. Hợp nhất (arr, l, m, r) là quá trình đặc biệt quan trọng trả định rằng arr với arr được bố trí và thích hợp độc nhất vô nhị nhị mảng nhỏ đang bố trí thành một. Xem cách triển khai C sau để hiểu biết thêm cụ thể.

MergeSort (arr <>, l, r)Nếu r> l 1. Tìm điểm giữa để chia mảng thành nhì nửa: Tại giữa m = (l + r) / 2 2. Hợp tốt nhất cuộc call Sắp xếp đến nửa đầu: call mergeSort(arr, l, m) 3. Hợp tốt nhất cuộc call Sắp xếp đến nửa sau: gọi mergeSort(arr, m + 1, r) 4. Hợp nhất nhì nửa được thu xếp sinh hoạt bước 2 và 3: Gọi merge(arr, l, m, r)Sơ vật dụng sau đây tự wikipedia cho biết thêm các bước thu xếp thích hợp độc nhất vô nhị hoàn hảo cho 1 mảng ví dụ 38, 27, 43, 3, 9, 82, 10. Nếu chúng ta chăm chú kỹ rộng sơ đồ dùng, chúng ta có thể thấy rằng mảng được phân chia đệ quy làm cho nhị nửa cho đến khi form size đổi mới 1. khi kích cỡ đổi thay 1, các quá trình hòa hợp độc nhất đang hoạt động với ban đầu đúng theo duy nhất các mảng quay trở về cho đến Lúc mảng hoàn chỉnh sẽ phù hợp độc nhất.

Xem thêm: Cons And Pros Là Gì ? Các Từ Quan Trọng Liên Quan Đến Pros And Cons

Tấm hình minch hoạ


*

2. Code ví dụ trên những ngôn ngữ

C++

// C++ program for Merge Sort #include using namespace std; // Merges two subarrays of arr<>. // First subarray is arr // Second subarray is arr void merge(int arr<>, int l, int m, int r) { int n1 = m - l + 1; int n2 = r - m; // Create temp arrays int L, R; // Copy data to lớn temp arrays L<> and R<> for(int i = 0; i C

/* C program for Merge Sort */#include #include // Merges two subarrays of arr<>. // First subarray is arr // Second subarray is arr void merge(int arr<>, int l, int m, int r) { int i, j, k; int n1 = m - l + 1; int n2 = r - m; /* create temp arrays */ int L, R; /* Copy data khổng lồ temp arrays L<> và R<> */ for (i = 0; i Java

/* Java program for Merge Sort */class MergeSort { // Merges two subarrays of arr<>. // First subarray is arr // Second subarray is arr void merge(int arr<>, int l, int m, int r) { // Find sizes of two subarrays to be merged int n1 = m - l + 1; int n2 = r - m; /* Create temp arrays */ int L<> = new int; int R<> = new int; /*Copy data to lớn temp arrays*/ for (int i = 0; i Python3

# Pybé 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 # into 2 halves mergeSort(L) # Sorting the first half mergeSort(R) # Sorting the second half i = j = k = 0 # Copy data to lớn temp arrays L<> và R<> while i Kết quả


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 sản phẩm không giống nhau. Merge Sort là 1 thuật tân oán đệ quy và độ phức hợp thời gian có thể được biểu hiện như sau.

T (n) = 2T (n / 2) + θ (n)Sự tái diễn bên trên có thể được giải quyết bằng phương pháp áp dụng phương pháp tree tái diễn hoặc cách thức Master. Nó phía trong ngôi trường hợp II của Phương pháp Master và nghiệm của sự việc tái diễn là θ (nLogn). Độ tinh vi thời gian của Sắp xếp đúng theo nhất(Merge Sort) là θ (nLogn) vào cả 3 trường vừa lòng (xấu nhất, vừa phải với tốt nhất) bởi bố trí hợp độc nhất luôn phân tách mảng thành hai nửa cùng mất thời gian con đường tính nhằm đúng theo độc nhất vô nhị nhì nửa.

Không gian phú trợ: O (n)

Mô hình thuật toán: Chia và Chinc phục

Ổn định:

4. Ứng dụng

Merge Sort khôn xiết có ích để bố trí những list được links vào thời gian O (nLogn). Trong trường hòa hợp danh sách được link, ngôi trường vừa lòng này không giống nhau đa số do sự biệt lập vào phân chia bộ lưu trữ của mảng cùng list được link. Không y như mảng, các nút danh sách links có thể ko liền kề trong bộ lưu trữ. Không y hệt như một mảng, trong danh sách link, chúng ta có thể chèn các mục vào thân vào O (1) không khí thừa và O (1) thời hạn. Do kia vận động vừa lòng tuyệt nhất của thu xếp hòa hợp độc nhất rất có thể được triển khai mà lại không tồn tại thêm dung lượng đến danh sách được link. Trong mảng, chúng ta cũng có thể triển khai truy cập bỗng nhiên lúc các thành phần ở kề nhau vào bộ nhớ lưu trữ. Giả sử bọn họ tất cả một mảng A số nguim (4 byte) và đặt liên tưởng của A <0> là x thì để truy cập A , bạn cũng có thể truy cập thẳng vào bộ nhớ lưu trữ trên (x + i * 4). Không hệt như mảng, bọn họ tất yêu tiến hành truy cập đột nhiên trong danh sách liên kết. Sắp xếp nkhô hanh thưởng thức không ít các loại truy vấn. Trong list links để truy vấn chỉ mục sản phẩm i, chúng ta nên dịch rời từng nút ít từ đầu mang lại nút ít sản phẩm i vì chưng bọn họ không tồn tại kăn năn bộ lưu trữ tiếp tục. Do kia, chi phí tăng đối với mau lẹ. Sắp xếp vừa lòng độc nhất vô nhị truy vấn dữ liệu một biện pháp tuần trường đoản cú với nhu yếu truy cập bỗng dưng rẻ.Vấn đề đảo ngược số lượngĐược áp dụng vào bố trí mặt ngoài

Nguồn và Tài liệu tiếng anh tđê mê khảo:

Tài liệu trường đoản cú gamesbaidoithuong.com:

Nếu bạn thấy hay cùng bổ ích, chúng ta có thể tham mê gia các kênh sau của gamesbaidoithuong.com nhằm dấn được rất nhiều hơn nữa: