c言語のマージソートについてです。学校の課題でマージソートを1つの関数のみで作成せよという課題があるのですが、うまくsortされません。長いですが、下のコードが自分で書いたコードです。改善点がわかる方お願いします。
#include <stdio.h> void Mergesort (int a[], int left, int right){ int mid, i, j, k, tmp[1000]; if (left == right){ return ; } mid = (left+right)/2; Mergesort(a, left, mid); Mergesort(a, mid+1, right); for (i = left; i<=mid; i++){ tmp[i]=a[i]; } for (i = mid+1 , j = right; i<=right; i++ && j--){ tmp[i]=a[j]; //後半部は空の配列に逆順に入れる } for (k = left; k<=right; k++){ if(tmp[left]<=tmp[right]){ a[k]=tmp[left]; left=left+1; } else{ a[k]=tmp[right]; right=right-1; } } } int main (void){ int i; int array[1000]; int total; printf("入力する数値の数は?"); scanf("%d" , &total); //配列の要素の総数の入力 printf("%d個の数値を入力してください \n", total); for (i=0; i<total; ++i){ scanf("%d" , &array[i]); //各要素の入力 } printf("sort前: "); for (i = 0; i < total; i++) { printf("%d ", array[i]); //sort前の配列の表示 } printf("\n"); Mergesort(array, 0, total-1 ); printf("sort後: "); for (i = 0; i < total; i++) { printf("%d ", array[i]); //sort後の配列の表示 } printf("\n"); return 0; }
回答4件
あなたの回答
tips
プレビュー