روش مرتب سازی ادغام از الگوریتم تقسیم و حل (divide-and-conqure) برای مرتب کردن داده ها استفاده می کنه. در این الگوریتم مساله به چند جزء کوچکتر تقسیم می شه. هر کدوم از این قسمتها رو به طور مجزا حل کرده ، و با ترکیب اونها به مساله اصلی می رسیم. و اما طرح کلی مرتب سازی ادغام:
در این روش داده ها به دو قسمت مساوی تقسیم می شن. و هر کدوم از این قسمتها - به صورت بازگشتی - مرتب ، و با ادغامشون دادها بصورت کامل مرتب می شن.
[
CODE]void merge_sort ( int arr[ ] , int low , int high )
{
if ( low >= high )
return ;
int mid = ( low + high ) / 2 ;
merge_sort ( arr , low , mid ) ;
merge_sort ( arr , mid + 1 , high ) ;
merge_array ( arr , low , mid , high ) ;
}
void merge ( int arr[ ] , int low , int mid , int high )
{
int i , j , k , t ;
j = low ;
for ( i = mid + 1 ; i <= high ; i ++ )
{
while ( arr[ j ] <= arr[ i ] && j < i )
j ++ ;
if ( j == i )
break ;
t = arr[ i ] ;
for ( k = i ; k > j ; k -- )
arr[ k ] = arr[ k - 1 ] ;
arr[ j ] = t ;
}
}[/CODE]
و برای مرتب سازی انتخابی
کد:
http://fa.wikipedia.org/wiki/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85_%D9%85%D8%B1%D8%AA%D8%A8%E2%80%8C%D8%B3%D8%A7%D8%B2%DB%8C
کد:
http://fa.wikipedia.org/wiki/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85_%D9%85%D8%B1%D8%AA%D8%A8%E2%80%8C%D8%B3%D8%A7%D8%B2%DB%8C#.D9.81.D9.87.D8.B1.D8.B3.D8.AA_.D8.A7.D9.84.DA.AF.D9.88.D8.B1.DB.8C.D8.AA.D9.85.E2.80.8C.D9.87.D8.A7.DB.8C_.D9.85.D8.B1.D8.AA.D8.A8.E2.80.8C.D8.B3.D8.A7.D8.B2.DB.8C