머지소트 구현하는데 동적배열이용 해서 하려는데 잘안되네염
모람
질문 제목 : 질문 요약 :merge 함수에서 터지는거 같은데 왜터질까요 맞는거같은데...질문 내용 :
#includestdio.h
#includestdlib.h
void mergesort(int * a,int p,int r);
void merge(int * a,int p,int q,int r);
int main()
{
int datanum,p,r,i;
int * a;
printf(입력 받을 데이터의 수를 입력하세요. : );
scanf(%d,&datanum);
a=(int*)malloc(sizeof(int)*datanum);
printf(입력한 데이터의 수만큼 정렬한 숫자들을 입력하세요. : );
for(i=0;idatanum;i++)
scanf(%d,(a+i));
for(i=0;idatanum;i++)
printf(%d ,*(a+i));
p=0, r=datanum-1;
mergesort(a,p,r);
free(a);
return 0;
}
void mergesort(int * a,int p,int r)
{
int q;
if(pr)
{
q=(p+r)/2;
mergesort(a,p,q);
mergesort(a,q,r);
merge(a,p,q,r);
}
}
void merge(int * a,int p,int q, int r)
{
int i,j,t;
int * tmp;
i=p; j=q+1; t=0;
tmp=(int*)malloc(sizeof(int)*(r-p+1));
while(i=q&&j=r)
{
if(*(a+i)=*(a+j))
{
*(tmp+t)=*(a+i);
i++; t++;
}
else
{
*(tmp+t)=*(a+j);
j++; t++;
}
}
while(i=q)
{
*(tmp+t)=*(a+i);
i++; t++;
}
while(j=r)
{
*(tmp+t)=*(a+j);
j++; t++;
}
i=p; t=0;
while(i=r)
{
*(a+i)=*(tmp+t);
i++; t++;
}
free(tmp);
}
-
세련
감사합니다. 미쳐발견하지못햇네요
-
콩알눈
아 제가 자세히 보지 못했네요
puts(\\);
p=0, r=dataNum-1;
mergeSort(A,p,r);
for(i=0;idataNum;i++) //확인하기위한 프린트
printf(\%d \ -
허리품
머지함수보시면 tmp로 동적배열하나더 만들었는데 왜안되는거죠??
-
중독적
머지소트하실거면 같은 크기의 배열이 하나 더 있어야 됩니다. 책을 다시한번 보세요.