PDA

View Full Version : سوال: كمك در آناليز كدهاي c++ الگوريتم merge sort



sara.karimi.69
یک شنبه 31 خرداد 1394, 09:26 صبح
سلام اساتيد محترم لطفا كمك كنيد
مي خواستم كمك كنيد و اين دوتا تابع كه فرستادم كدهاش برام توضيح بديد كه هر كد چيكار مي كنه؛ تابع mergesort تقريبا ياد گرفتم ولي تابع merge نه
لطفا كمك كنيد؛ با تشكر

sara.karimi.69
یک شنبه 31 خرداد 1394, 13:48 عصر
#include <iostream>
usingnamespacestd;
#include <conio.h>
void merge(int*,int, int , int);
void mergesort(int*a, int low, int high)
{
int mid;
if(low < high)
{
mid=(low+high)/2;
mergesort(a,low,mid);
mergesort(a,mid+1,high);
merge(a,low,high,mid);
}
return;
}
void merge(int*a, int low, int high, int mid)
{
Int i, j, k, c[50];
I = low;
k = low;
j = mid +1;
while(i<= mid && j <= high)
{
if(a[i]< a[j])
{
c[k]= a[i];
k++;
i++;
}
else
{
c[k]= a[j];
k++;
j++;
}
}
while(i<= mid)
{
c[k]= a[i];
k++;
i++;
}
while(j <= high)
{
c[k]= a[j];
k++;
j++;
}
for(i= low;i< k;i++)
{
a[i]= c[i];
}
}

reza-p
جمعه 14 اسفند 1394, 18:02 عصر
ممنون بابت سورس کد

radeon
جمعه 14 اسفند 1394, 19:16 عصر
void merge(int*a, int low, int high, int mid)
{
Int i, j, k, c[50]; //c[50] آرایه که برای ادغام استفاده میشه
I = low; // ابتدای لیست اول
k = low; // ابتدای لیست دوم
j = mid +1;
while(i<= mid && j <= high) // پیمایش دو لیست توسط حلقه و ادغام دو عضو از دو لیست بر طبق شرایط
{
if(a[i]< a[j])
{
c[k]= a[i];
k++;
i++;
}
else
{
c[k]= a[j];
k++;
j++;
}
}

// اگر عضوی از لیست اول یا لیست دوم باقی مانده باشه توسط این دو حلقه ادغام میشه
while(i<= mid)
{
c[k]= a[i];
k++;
i++;
}
while(j <= high)
{
c[k]= a[j];
k++;
j++;
}
//اعضای مرتب شده به آرایه a بازگردانده میشن
for(i= low;i< k;i++)
{
a[i]= c[i];
}
}