۲۲-آذر-۱۳۸۸, ۱۹:۰۳:۲۷
۲۲-آذر-۱۳۸۸, ۲۱:۴۴:۱۶
کد:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
int S[]={27,10,12,20,25,13,15,22},Counter=0;
void mergsort2(int,int);
void merg2(int,int,int);
void main(void) {
int i;
clrscr();
printf("MergeSort Algoritm\n");
for(i=0,printf("Befor sort: ");i<8;printf("%3d",S[i]),i++);
mergsort2(0,7);
for(i=0,printf("\nAfter sort: ");i<8;printf("%3d",S[i]),i++);
printf("\nThe repetition of main operation is: %d",Counter);
getch();
}
void mergsort2(int low,int high){
int mid;
if (low<high){
mid=(low+high)/2;
mergsort2(low,mid);
mergsort2(mid+1,high);
merg2(low,mid,high);
}
}
void merg2(int low,int mid,int high){
int i,j,k,index,*U;
U=(int *) malloc(sizeof(int) * (high-low+1));
i=low; j=mid+1; k=low;
while(i<=mid && j<=high){
Counter++;
if(S[i]<S[j]){
U[k]=S[i];
i++;
} else {
U[k]=S[j];
j++;
}
k++;
}//end of while
if(i>mid)
for(index=j;index<=high;U[k]=S[index],k++,index++);
else
for(index=i;index<=mid;U[k]=S[index],k++,index++);
for(index=low;index<=high;S[index]=U[index],index++);
}
منبع
۲۵-آذر-۱۳۸۸, ۲۱:۲۴:۳۴
سلام
با زبان c++ اگه ممكنه برام بفرسين
ممنون.
با زبان c++ اگه ممكنه برام بفرسين
ممنون.
۰۵-بهمن-۱۳۸۸, ۲۰:۲۲:۱۷
(یه کاراکتراخردستور واسه ی تغییر ندادن فونت اضافه کردم )
Void mergsort ( low , high )d
}
If ( low < high ) {d
Mid = (low + high ) /2 ;d
Mergsort ( low , mid) ;d
Mergsort (mid +1 , high ) ;d
Merg ( low , mid , high ) ;d
}
} / end barname
Void merg ( low , mid , high )d
{
int a [ low .. high ] ;d
H = low ; i = high ; j = mid +1 ; d
While ( ( h <= mid ) && ( j <= high ) )d
{
If ( s [ h ] <= s [ j ] ) { L [ i] = s [ h ] ; H + +; }d
Else { L [ i] = s [ j ] ; j + + ; }d
i ++ ;d
} / end while d
If ( h > mid ) d
For ( int k = j ; k < = high ; k++)d
{ L [ i] = s [ k ] ; i ++ ;d }
Else for ( k=h ; k <=mid ; k++ ) d
{ L [ i]= s [ k ] ; i ++ ;d}
For ( k = low ; k<= high ; k++ ) d
S [ k ] = L [ k ] ;d
} / end tabe
در الگوریتم مرتب سازی ادغامی لیست داده ها به دوقسمت تقسیم میشه سپس دوبارهرکدوم از زیر لیست ها به دوقسمت تقسیم می شه واین تقسیمها ادامه پیدا میکنه که این کارتوسط برنامه ی اصلی وفراخوانی اون به صورت بازگشتی انجام میشه بعد از این که تعداد داده ها برابر 1 شد تقسیم داده ها تموم میشه وتابع فراخوانی میشه توی تابع زیر لیست ها با هم مقایسه و مرتب میشن(واسه ی مرتب شدن دستورات برنامه مجبور شدم یه کاراکتر به اخر دستورات اضافه کتم )
Void mergsort ( low , high )d
}
If ( low < high ) {d
Mid = (low + high ) /2 ;d
Mergsort ( low , mid) ;d
Mergsort (mid +1 , high ) ;d
Merg ( low , mid , high ) ;d
}
} / end barname
Void merg ( low , mid , high )d
{
int a [ low .. high ] ;d
H = low ; i = high ; j = mid +1 ; d
While ( ( h <= mid ) && ( j <= high ) )d
{
If ( s [ h ] <= s [ j ] ) { L [ i] = s [ h ] ; H + +; }d
Else { L [ i] = s [ j ] ; j + + ; }d
i ++ ;d
} / end while d
If ( h > mid ) d
For ( int k = j ; k < = high ; k++)d
{ L [ i] = s [ k ] ; i ++ ;d }
Else for ( k=h ; k <=mid ; k++ ) d
{ L [ i]= s [ k ] ; i ++ ;d}
For ( k = low ; k<= high ; k++ ) d
S [ k ] = L [ k ] ;d
} / end tabe
در الگوریتم مرتب سازی ادغامی لیست داده ها به دوقسمت تقسیم میشه سپس دوبارهرکدوم از زیر لیست ها به دوقسمت تقسیم می شه واین تقسیمها ادامه پیدا میکنه که این کارتوسط برنامه ی اصلی وفراخوانی اون به صورت بازگشتی انجام میشه بعد از این که تعداد داده ها برابر 1 شد تقسیم داده ها تموم میشه وتابع فراخوانی میشه توی تابع زیر لیست ها با هم مقایسه و مرتب میشن(واسه ی مرتب شدن دستورات برنامه مجبور شدم یه کاراکتر به اخر دستورات اضافه کتم )