PDA

View Full Version : سوال: رفع اشکال در کد Merge Sort



jannatmakan
دوشنبه 06 آذر 1391, 22:45 عصر
اگر کسی همین الان online هست . لطفاً بگه این کد چرا درست عمل نمی کنه؟ ممنون

#include<iostream>
#include<algorithm>
#include<conio.h>
using namespace std;

int merge(int arr[],int n,int mid,int m)
{
int *temp;
temp=new int [m];
int i=n,j=mid+1,k=0;

while(i<mid && j<m)
{
if(arr[i]<arr[j])
temp[k++]=arr[i++];
else
temp[k++]=arr[j++];
}

while(i<mid)
temp[k++]=arr[i++];
while(j<m)
temp[k++]=arr[j++];

for(i=0;i<m;i++)
arr[i]=temp[i];

return 0;
}

int mergesort(int list[],int start,int end)
{
int mid;
if(start>=end)
return 0;
else
{
mid=(start+end)/2;
mergesort(list,start,mid);
mergesort(list,mid+1,end);
merge(list,start,mid,end);
}
return 0;
}

int main()
{
int *arr;
int n,i;

cout<<"Enter lenght of array:";
cin>>n;
arr=new int[n];

for(i=0;i<n;i++)
{
cout<<"Element[ "<<i<<" ]:";
cin>>arr[i];
}

mergesort(arr,0,n);

for(i=0;i<n;i++)
cout<<"\nElement[ "<<i<<" ]:"<<arr[i];

getch();////////////////////

return 0;
}

مسعود اقدسی فام
دوشنبه 06 آذر 1391, 23:11 عصر
نقدا خط 61 n رو به n - 1 تغییر بدید تا ببیندم جای دیگه مشکل نداره. بعد اینکه تغییر دادید اجرا کنید. شاید اصلا مشکل نداره دیگه.

مسعود اقدسی فام
دوشنبه 06 آذر 1391, 23:20 عصر
تابع merge مشکل زیاد داره. مثلا چرا طول temp متغیر m شده؟ این متغیر صرفا انتهای بازه رو نشون می‌ده. یا اینکه چرا آخر سر temp از اندیس صفر arr شروع می‌شه به ریخته شدن. خلاصه کلا الگوریتم اشتباه پیاده‌سازی شده.

روشی که اینجا استفاده کردید روش برون از جا هستش. یه روش درجا برای تابع merge این لینک هست:

http://www.algorithmha.ir/post-%D9%85%D8%B1%D8%AA%D8%A8-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%A7%D8%AF%D8%BA%D8%A7%D9%85%DB%8C.aspx

البته اشکالات دیگه‌ای هم هست. کلا هر جا new می‌کنید باید آخرش delete بکنید. البته نبودش خللی در اجرای برنامه ایجاد نمی‌کنه. ولی خب حافظه گرفتید و آزاد نکردید آخرش.

jannatmakan
دوشنبه 06 آذر 1391, 23:37 عصر
آره . حواسم به Delete کردن نبود. ولی اگر پروژه باشه حتماً به کار می برم . بازم ممنون.