روش مرتب سازی ادغامی از الگوریتم تقسیم و حل (divide-and-conqure) برای مرتب کردن دادهها استفاده میکنه. در این الگوریتم مساله به چند جزء کوچکتر تقسیم میشه. هر کدوم از این قسمتها رو به طور مجزا حل کرده ، و با ترکیب اونها به مساله اصلی میرسیم. و اما طرح کلی مرتب سازی ادغام:
در این روش دادهها به دو قسمت مساوی تقسیم میشن. و هر کدوم از این قسمتها - به صورت بازگشتی - مرتب ، و با ادغامشون دادها بصورت کامل مرتب میشن.
پیاده سازی مرتب سازی Merge sort)) در c++
void merge_sort (int arr[ ] , int low , int high)
{
if (low >= high)
return;
int mid = (low + high) / ۲;
merge_sort (arr , low , mid);
merge_sort (arr , mid + ۱ , high);
merge_array (arr , low , mid , high);
}
procedure merge_sort (var arr : array of integer ; l : integer ; h : integer);
var
m : integer;
begin
if l >= h then
exit;
m := (l + h) div ۲;
merge_sort (arr , l , m);
merge_sort (arr , m + ۱ , h);
merge_array (arr , l , m , h);
end;
برنامه کامل مرتب سازی
merg// mergesort.cpp
#include <algorithm>
#include <iostream>
using namespace std;
template <class T>
void mergesort( T a[], int start, int stop )
{
// For demonstration purposes only
cout << "sorting: ";
for (int i = start; i < stop; ++i)
cout << a[i] << " ";
cout << endl;
if ( stop - start > 1 )
{
int middle = ( start + stop ) / 2;
mergesort( a, start, middle );
mergesort( a, middle, stop );
inplace_merge( a+start, a+middle, a+stop );
}
cout << "result : ";
for (int i = start; i < stop; ++i)
cout << a[i] << " ";
cout << endl;
}
int main()
{
int a[10] = {12,6,2,25,19,23,60,42,30,59};
mergesort(a, 0, 10);
system("pause");
return 0;
}