۱۳-دى-۱۳۸۸, ۱۵:۲۲:۲۶
۱۳-دى-۱۳۸۸, ۲۳:۲۰:۵۵
سلام.درمورد مرتب سازی ادغامی توضیح بدید کمی.دقیقا بگید چطور مرتب می کنه.
۱۴-دى-۱۳۸۸, ۲۰:۳۵:۵۲
مشکلتون چیه؟ شبه کدش که توی نت زیاده و مطمئنا توی کتابتون هم هست فقط باید تبدیلش کنید.
حال تبدیل هم ندارید کد آمادش هم هست . این یه نمونش که من از اینجا برداشتم:
توضیحش هم توی ویکی پدیا هست.
حال تبدیل هم ندارید کد آمادش هم هست . این یه نمونش که من از اینجا برداشتم:
کد:
#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++);
}