độ phức tạp của thuật toán merge sort

Chào ace, bài này chúng ta vẫn tò mò về một trong những thuật toán sắp xếp được thực hiện các vào lập trình sẵn cùng thực tế độc nhất vô nhị đó là Merge Sort, sau đây campusstudylab.vn đã ra mắt với share đưa ra tiết(có mang, áp dụng của chính nó, code ví dụ, điểm mạnh, điểm yếu…) về Merge Sort thông qua các phần sau.You watching: độ phức tạp của thuật toán thù merge sort

1. Giới thiệu

Giống như QuickSort, Merge Sort là 1 thuật tân oán Chia với Chinch phục. Nó phân chia mảng đầu vào thành nhì nửa, điện thoại tư vấn bao gồm nó mang lại nhì nửa với tiếp đến hòa hợp độc nhất vô nhị nhị nửa sẽ sắp xếp. Hàm merge () được thực hiện nhằm hợp độc nhất vô nhị hai nửa. Hợp độc nhất (arr, l, m, r) là quá trình quan trọng đặc biệt giả định rằng arr và arr được bố trí với hợp độc nhất vô nhị nhị mảng bé sẽ thu xếp thành một. Xem bí quyết thực hiện C sau để biết thêm chi tiết.

MergeSort (arr , l, r)Nếu r> l 1. Tìm điểm giữa nhằm phân chia mảng thành nhì nửa: Ở thân m = (l + r) / 2 2. Hợp tốt nhất cuộc hotline Sắp xếp cho nửa đầu: call mergeSort(arr, l, m) 3. Hợp tốt nhất cuộc Call Sắp xếp mang lại nửa sau: Điện thoại tư vấn mergeSort(arr, m + 1, r) 4. Hợp độc nhất vô nhị nhì nửa được thu xếp làm việc bước 2 với 3: call merge(arr, l, m, r)Sơ vật dụng dưới đây tự wikipedia cho biết thêm các bước sắp xếp vừa lòng tuyệt nhất hoàn hảo cho 1 mảng ví dụ 38, 27, 43, 3, 9, 82, 10. Nếu chúng ta để mắt tới kỹ hơn sơ đồ, chúng ta có thể thấy rằng mảng được phân chia đệ quy làm nhì nửa cho đến Khi form size đổi mới 1. Lúc form size đổi mới 1, các quá trình hợp độc nhất vô nhị đang chuyển động cùng bước đầu hợp nhất các mảng trở về cho tới lúc mảng hoàn hảo sẽ thích hợp nhất.See more: Crúc Đại Bi Có Ý Nghĩa Gì - Ý Nghĩa Của Từng Câu Trong Kinch Crúc Đại Bi

Bức Ảnh minh hoạ




You watching: độ phức tạp của thuật toán merge sort

*

2. Code ví dụ bên 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 // 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 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 to temp arrays L & 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 lớn temp arrays*/ for (int i = 0; i Python3

# Pynhỏ bé program for implementation of MergeSort def mergeSort(arr): if len(arr) >1: mid = len(arr)//2 # Finding the mid of the array L = arr # Dividing the array elements R = arr # into lớn 2 halves mergeSort(L) # Sorting the first half mergeSort(R) # Sorting the second half i = j = k = 0 # Copy data khổng lồ temp arrays L & R while i Kết quả

Given array is12 11 13 5 6 7Sorted array is5 6 7 11 12 13

3.

See more: #4 Cách Đắp Mặt Nạ Lòng Trắng Trứng Mấy Lần 1 Tuần ? Làm Mặt Nạ Trứng Gà


See more: Hướng Dẫn Cách Live Stream Game Trên Youtube Bằng Máy Tính, Laptop


Độ phức tạp

Độ phức tạp về thời gian: Sắp xếp những mảng bên trên các vật dụng khác nhau. Merge Sort là một thuật toán thù đệ quy cùng độ phức tạp thời hạn có thể được bộc lộ như sau.See more: Ngày Thế Giới Phòng Chống Ung Tlỗi Và Ngày Thế Giới Phòng Chống Ung Thư, 04

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

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

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

Ổn định:

4. Ứng dụng

Merge Sort khôn cùng bổ ích nhằm bố trí các danh sách được links trong thời hạn O (nLogn). Trong ngôi trường hợp list được link, trường vừa lòng này không giống nhau chủ yếu bởi sự khác hoàn toàn 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, những nút ít danh sách link có thể ko gần cạnh vào bộ nhớ lưu trữ. Không y như một mảng, vào danh sách links, chúng ta có thể cnhát những mục vào giữa trong O (1) không khí quá với O (1) thời hạn. Do kia vận động hợp tuyệt nhất của bố trí đúng theo độc nhất có thể được triển khai nhưng mà không có thêm dung tích cho danh sách được links. Trong mảng, chúng ta có thể thực hiện truy cập thốt nhiên Lúc những phần tử nằm kề nhau vào bộ lưu trữ. Giả sử bọn họ bao gồm một mảng A số nguyên ổn (4 byte) cùng đặt tương tác của A là x thì nhằm truy cập A , bạn cũng có thể truy cập thẳng vào bộ nhớ trên (x + i * 4). Không y như mảng, bọn họ cấp thiết thực hiện truy vấn thiên nhiên vào danh sách links. Sắp xếp nhanh khô đòi hỏi không ít một số loại truy cập. Trong list link để truy vấn chỉ mục đồ vật i, chúng ta đề nghị dịch chuyển từng nút ít từ trên đầu mang đến nút ít lắp thêm i do họ không có kăn năn bộ lưu trữ liên tục. Do kia, chi phí tăng so với nhanh chóng. Sắp xếp vừa lòng độc nhất vô nhị truy cập tài liệu một cách tuần từ cùng nhu yếu truy cập hốt nhiên thấp.Vấn đề hòn đảo ngược số lượngĐược áp dụng trong bố trí bên ngoài

Nguồn với Tài liệu giờ đồng hồ anh tđê mê khảo:

Tài liệu từ campusstudylab.vn:

Nếu bạn thấy giỏi với có ích, bạn cũng có thể tmê mẩn gia những kênh sau của campusstudylab.vn để thừa nhận được nhiều hơn nữa: