THUẬT TOÁN MERGE SORT C++

Tìm gọi thuật tân oán sắp xếp trộn Merge Sort, ý tưởng thuật toán thù, giải thuật, ưu nhược điểm và Reviews độ phức hợp. Cài đặt thuật toán merge sort bằng code C/C++, java . . . tất cả sẽ có trong bài viết này nhé!


1. Merge sort là gì?

Sắp xếp trộnMerge Sort là một trong những thuật toán thù sắp xếp trực thuộc các loại sắp xếp nkhô nóng trong kỹ thuật máy tính xách tay. Merge sort là thuật tân oán điển hình cho tứ tưởng chia để trị nhằm xử lý các bài toán tất cả dữ liệu Khủng và phức hợp. Cụ thể với bài bác toán thu xếp, nó đã phân tách nhỏ tuổi list yêu cầu thu xếp thành từng bộ phận tránh sau đó hòa nhập theo cách thức trộn thoải mái và tự nhiên thành hàng có máy tự.

Bạn đang xem: Thuật toán merge sort c++

Một chút ít về lịch sử hào hùng, Merge sort là một trong số những phương thức thứ nhất áp dụng trong bài tân oán sắp xếp. Thuật toán thù này được khuyến cáo vì chưng John Von Neumann vào đầu năm mới 1945. Một cuộc đàm luận và so với cụ thể về thu xếp phù hợp duy nhất đã có được lộ diện trong một báo cáo của Goldstine cùng Neumann như đầu năm mới 1948.

Đây là 1 trong trong những thuật toán thù sắp xếp đối chiếu cực kì thông dụng vì thế hãy bổ sung cập nhật kiến thức về nó ít nhất là ý tưởng thuật tân oán, biết đâu sau đây nó sẽ giúp ích đến quá trình của người tiêu dùng. Mình đã cố gắng trình bày cụ thể tuyệt nhất hoàn toàn có thể sẽ giúp chúng ta dễ nắm bắt nó nha.

2. Ý tưởng bố trí trộn

Các thuật toán thu xếp đơn giản nlỗi Bubble Sort, Insertion Sort . . . đông đảo chẳng thể cách xử trí được dữ liệu phệ. Thuật tân oán thu xếp trộn đem ý tưởng từ các việc chia nhằm trị để phân tách nhỏ dại bài toán thành các bài xích toán nhỏ hơn, kế tiếp giải quyết bọn chúng. Từ kia sẽ giúp đỡ xử lý dữ liệu bự một phương pháp xuất sắc hơn, tối ưu về phương diện thời hạn.

Ý tưởng chỉ dẫn nlỗi sau:

Chia danh sách gồm n bộ phận không được bố trí thành n danh sách con, mỗi danh sách đựng 1 phần tử (list một trong những phần tử được xem như là đang sắp xếp).Liên tục hòa hợp duy nhất những danh sách bé nhằm tạo ra các danh sách bé được sắp xếp mớ cho đến lúc chỉ từ lại một list. Đây vẫn là danh sách được thu xếp.

lúc tiến hành code, ta sẽ ví dụ hóa bằng các bước:

Bước 1:

Chia hàng phải sắp xếp thành 2 hàng conTừ hàng bé chiếm được lại tiếp tục tạo thành 2 hàng nhỏ nhỏ hơn nữaQuá trình phân chia liên tiếp cho tới lúc nhận được dãy nhỏ chỉ từ duy nhất 1 phần tử.

Cách 2:

Hòa nhập 2 hàng bé nhỏ dại tốt nhất thành hàng nhỏ lớn hơn làm sao để cho đúng sản phẩm công nghệ tựTừ nhì dãy nhỏ to hơn lại hòa nhập thành 2 dãy con to hơn nữa….Quá trình hòa nhập cđọng tiếp tục những điều đó cho tới khi chiếm được dãy số thuở đầu đã làm được thu xếp.

Xem thêm: 3+ Cách Tìm Thư Lưu Trữ Trong Gmail Nằm Ở Đâu, How To Find Archived Mail On Gmail

Để dễ dàng hình dung, chúng ta nhìn hình sau nhé:


*
Hình minc họa merge sort

Bạn có thể truy vấn vào hackereath.com nhằm tìm hiểu thêm animation của thuật toán nhé!

Lưu thiết bị thuật tân oán thu xếp trộn:


*
Lưu thứ thuật toán

3. Cài đặt thuật toán thù Merge sort

Với giải mã nêu bên trên, ta cần thiết kế nhì hàm, một hàm dùng để làm phân tách nhỏ dại danh sách làm thân hàm Merge sort, một hàm dùng để làm trộn nhị danh sách bé lại với nhau.

Trộn nhì hàng nhỏ xuất xắc có cách gọi khác là hòa nhập hai dãy bé là trái tlặng đặc trưng tuyệt nhất của lời giải. Có lẽ đây là lý do nhưng mà người ta Call nó là bố trí trộn.

3.1 Hàm trộn – merge C/C++

Chú ý: Bài viết của mình triển khai sắp xếp tăng đột biến nhé!

Hàm trộn sẽ ghxay hai hàng con lại thành một hàng bao gồm sản phẩm công nghệ trường đoản cú, dãy bé nhỏ tốt nhất ta buộc phải ghnghiền sẽ có 1 phần tử. Thực chất đó là ghép nhị mảng ngay tắp lự nhau vẫn bố trí thành một mảng có trang bị tự.

Ta đã viết hàm trộn trực tiếp trên dãy ban sơ và knhị báo thêm 2 mảng trung gian (left, right) nhằm lưu giữ cùng trộn. Do này sẽ là trộn nhị dãy bé gần kề nhau.

Ý tưởng:

Tđắm say số truyền vào gồm: mảng a, địa điểm bước đầu start, địa điểm trung gian mid phân chia hai mảng nhỏ, vị trí sau cuối của mảngDuyệt cùng lúc 2 mảng bé trung gian, đưa ra phần tử nhỏ rộng rồi điền vào mảng chínhkhi một mảng bé đã mất, mang đến bộ phận còn lại của mảng nhỏ không hết vào mảng chính

Code C/C++

/* Hàm trộn - merge start - chỉ số bước đầu mảng mid - chỉ số thân, phân chia song mảng*/ void merge(int a<>, int start, int mid, int end){int n1 = mid - start + 1; // Số phần tử mảng bé trái // + 1 là do lưu lại thêm thành phần ở trong phần midint n2= end-mid; // Số bộ phận mảng con phảiint left; int right; // Khai báo nhì mảng trung gian// Copy giữ lại liệu từ mảng thiết yếu ra nhì mảng confor(int x=0; x=right) // Nếu bộ phận mảng nhỏ trái >= mảng con phảia=right; // Điển thành phần mảng con yêu cầu vào mảng chínhj++; // xét thành phần tiếp theo của mảng rightelse{ // trái lại có nghĩa là left

3.2 Hàm mergeSort

Phần này còn có thực hiện giải thuật đệ quy vào thiết kế, nếu như khách hàng không biết nó hoàn toàn có thể tham khảo tại đây.

Hàm mergeSort sẽ thực hiện:

Chia nhỏ dại mảng lúc đầu thành 2 mảng nhỏ.Thực hiện đệ quy mergeSort nhì mảng con đó. Cuối cùng thì trộn nhì mảng con lại bằng hàm merge đang viết nghỉ ngơi trên

Hàm mergeSort C/C++:

// merge//void merge(int a<>, int start, int mid, int end). . .// MergeSortvoid mergeSort(int a<>, int first, int end){int t; // trở thành để lưu giữ địa điểm chia đôi mảngif(firstĐể hàm thu xếp rất có thể hoạt động được, bạn cần ghép hai hàm ngơi nghỉ mục 3.1 với 3.2 lại nhé!

4. Đánh giá chỉ thuật tân oán bố trí trộn – Mergesort

Bảng đánh đưa thuật toán:

Trường hợpĐộ phức tạpBộ ghi nhớ sử dụng
Tốt nhấtO (n log n)n
Trung bìnhO (n log n)n
Xấu nhấtO(n log n)n

Ưu điểm:

Độ phức tạp mức độ vừa phải O(n log n), tốc độ xử lý tương đối nhanhCó tính bình ổn cùng yêu thích ứng, tốc độ không trở nên tác động những vị tài liệu đầu vàoXử lý khá giỏi với tài liệu mập đặc biệt là dạng các mục, file

Nhược điểm:

Tốn các bộ nhớ nếu áp dụng đệ quyCode cạnh tranh thiết lập, kha khá phức tạpTrong phần đông những trường thích hợp, thuật toán này không được Review cao hơn Quiông xã sort

Lời kết: Bài viết này bản thân gồm xem thêm cùng tổng phù hợp từ nhiều mối cung cấp khác biệt nhỏng Wikipedia, khôn xiết ước ao cảm nhận góp ý từ bỏ phía bạn đọc nhằm nó được trnghỉ ngơi đề xuất hoàn thành xong rộng.

Leave a Reply

Your email address will not be published. Required fields are marked *