مشکل در Max Heap - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مشکل در Max Heap

0 امتیاز

من در اجرا  به مشکل Stack Overflow برمیخورم در خط 27 :

#include<iostream>
#include<conio.h>
using namespace std;
int *a,heap_size,x,largest;
int left(int i)
{
	return (2*i)+1;
}
int right(int i)
{
	return (2*i)+2;
}
void max_heapfy(int a[],int i)
{
	int l,r,largest;
	l=left(i);
	r=right(i);
	if(l<=heap_size && a[l]>a[i])
		largest=l;
	else
		largest=i;
	if(r<=heap_size && a[r]>a[largest])
		largest=r;
	if(largest!=i)
		swap(a[i],a[largest]);
		
		max_heapfy(a,largest);
}
void build(int a[])
{
	int i;
	if(x % 2 ==1)
	{
		for(i=x/2;i>=0;i--)
			max_heapfy(a,i);
	}
	if(x % 2 ==0)
	{
		for(i=(x/2)-1;i>=0;i--)
			max_heapfy(a,i);
	}
}

void main()
{
	int *a,i;
	cout<<"Enter size of array:\n";
	cin>>x;
	heap_size=x;
	a=new int[x];
	cout<<"Enter Numbers for Ordering:\n";
	for(i=0;i<x;i++)
		cin>>a[i];
	build(a);
	for(i=0;i<x;i++)
		cout<<a[i];
	delete []a;
	getch();
}

 

سوال شده اسفند 23, 1392  بوسیله ی Pakniat (امتیاز 247)   9 21 32
دوباره تگ گذاری شد اسفند 26, 1392 بوسیله ی BlueBlade

2 پاسخ

0 امتیاز
 
بهترین پاسخ

مشکل در خط 26 بود که باید کد زیر رو اضافه می کردم (درس عبرت شد که اهمیت شرایط مرزی یک تابع بازگشتی رو دست کم نگیرم!!) :

if(l && r >x)
      return;

 

پاسخ داده شده اسفند 23, 1392 بوسیله ی Pakniat (امتیاز 247)   9 21 32
انتخاب شد اسفند 24, 1392 بوسیله ی Pakniat
+1 امتیاز

طبیعیه که  خطا بده چون شما تابع بازگشتی نوشتین ولی شرط پایان رو هیچ وقت چک نمی کنین و تابع بی نهایت بار صدا میشه  .

void max_heapfy(int a[],int i)
{
    int l,r,largest;
    l=left(i);
    r=right(i);
    if(l<=heap_size && a[l]>a[i])
        largest=l;
    else
        largest=i;
    if(r<=heap_size && a[r]>a[largest])
        largest=r;
    if(largest!=i)
        swap(a[i],a[largest]);
         
        max_heapfy(a,largest);
}

یعنی مثلا باید   چک کنین که اگر largest از یک مقداری بیشتر شد دیگه max_heapfy خودش رو صدا نزنه  و کلا return کنین .

پاسخ داده شده اسفند 23, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...