|
前にあったクイックソートを元にマージソートを作りましたが、実行してみると順番どおりにならびません。その前にマージソートはこんなプログラムでよいのでしょうか?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void mergesort(int A[],int L,int R){
int c=(L+R)/2,k,B[R+1],j=c+1,i;
if(L<R){
mergesort(A,L,c);
mergesort(A,c+1,R);
for(i=L;i<=j-1;i++){
B[i]=A[i];
}
for(i=j;i<=R;i++){
B[i]=A[i];
}
for(i=L,k=L;k<=R;k++){
if(A[i]<=A[j]){
A[k]=B[i];
i++;
}
else{
A[k]=B[j];
j++;
}
}
}
}
int main(void){
int n=8,A[8],i;
srand((unsigned int) time(NULL));
for(i=0;i<n;i++){
A[i]=rand()%100;
printf("A[%d]=%d\n",i,A[i]);
}
mergesort(A,0,n-1);
putchar('\n');
for(i=0;i<n;i++){
printf("A[%d]=%d\n",i,A[i]);
}
return 0;
}
|