私は最近、しばらくCに触れなかった後、Cを再びブラッシュアップし始めました。それで、私はマージソートを実装しようとすることから始めましたが、これらの行を約1時間調べた後、何が悪いのかを判断できませんでした。
int main(int argc,char** argv){
printf("test\n");
int x;
int input[] = {1,2,3};
int start=0;
int end=2;
for (x=0;x<5;x++){
//printf("%i\n",x);
}
printf("Run mergeSort in main \n");
mergeSort(input,start,end);
}
void mergeSort(int input[], int start, int end){
printf("Running merge %i %i",start,end);
int middle = (start + end)/2;
if (start < end){
mergeSort(input,start,middle);
mergeSort(input,middle+1,end);
merge(input,start,middle,end);
}
}
このプログラムを実行すると、最初の行の「test」が出力され、次に「Run merge sort inmain」が出力されますが、
printf("Running merge %i %i",start,end);
実行されないので、混乱します。メモリ割り当ての問題が見つからないか、非常に明白なものが欠落している可能性があります。
マージ関数は側面に実装されていますが、コードのその部分はこの問題に直接関連していなかったため、含めなかったことに注意してください。
残りのコードを編集します:
void merge(int input[],int start, int middle, int end){
int save_start = start;
int temp[end-start+1];
int index = 0;
printf("Start merge");
while (start<=middle || middle+1<=end){
if (input[start]<input[middle]){
temp[index] = input[start];
start++;
} else {
temp[index] = input[middle];
middle++;
}
index++;
}
while (start<=middle){
temp[index] = input[start];
start++;
}
while (middle+1<=end){
temp[index] = input[middle];
middle++;
}
int i=0;
int a;
for (a=save_start;i<index;a++,i++){
input[a]=temp[i];
}
}