ايران ويج

نسخه‌ی کامل: درخواست الگوريتم مرتب سازي ادغامي-
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
از دوستاني كه اين الگوريتم را دارن اگه برا من بفرسن ممنون ميشم
در ضمن به زبان c++ باشه
(درس ساختمان داده ها)
کد:
#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++ اگه ممكنه برام بفرسين
ممنون.
(یه کاراکتراخردستور واسه ی تغییر ندادن فونت اضافه کردم )
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 شد تقسیم داده ها تموم میشه وتابع فراخوانی میشه توی تابع زیر لیست ها با هم مقایسه و مرتب میشن(واسه ی مرتب شدن دستورات برنامه مجبور شدم یه کاراکتر به اخر دستورات اضافه کتم )