マージソートのプログラム
↓が自分の作ったマージソートのプログラムなのですが、コンパイルするとエラーが起きてしまいます。
mergesort()にポインタを引数として渡してる、引数の数が足りない、ということが書いてありますが…。
ちゃんとint型を渡してるし、引数の数も合ってるように思います。
どこがおかしいのでしょう?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define Max 255
int A[Max];
main(){
int n,k;
n=inputdata();
int w=1;
mergesort(w,n);
printdata(n);
return(0);
}
inputdata(){ //配列に乱数を要素として入れていく
int n,i;
printf("n= ");
scanf("%d",&n); //使用者にいくつの要素を入れるか指定してもらう
srand(time(NULL));
for(i=1; i<=n; i++){
A[i]=1+rand()%30;
}
printf("A[%d]={%d,",n,A[1]);
for(i=2;i<n;i++) printf("%d,",A[i]);
printf("%d}\n",A[n]);
return(n);
}
void mergesort(int p, int r){
int q;
if(p<r){
q=(p+r)/2;
mergesort(p,q);
mergesort(q+1,r);
merge(p,q,r);
}
}
void merge(int p, int q, int r){
int i,j,k,B[Max];
i=p; j=q+1;
for(k=p;k<=r;k++){
if((j>r) || ((i<=q)&&(A[i]<=A[j]))){
B[k]=A[i]; i++;
}else{
B[k]=A[j]; j++;
}
}
for(k=p; k<=r; k++) A[k]=B[k];
}
printdata(int n){
int i;
printf("A[%d]={%d,",n,A[1]);
for(i=2; i<n; i++) printf("%d,",A[i]);
printf("%d}\n",A[n]);
}
・エラーメッセージ
merge1.c: In function ‘main’:
merge1.c:12: warning: passing argument 1 of ‘mergesort’ makes pointer from integer without a cast
merge1.c:12: error: too few arguments to function ‘mergesort’
merge1.c: At top level:
merge1.c:31: error: conflicting types for ‘mergesort’
/usr/include/stdlib.h:294: error: previous declaration of ‘mergesort’ was here
merge1.c:41: warning: conflicting types for ‘merge’
merge1.c:37: warning: previous implicit declaration of ‘merge’ was here