■マージソートのアルゴリズムについて
N個の整数乱数(1以上100以下の整数)を発生させ配列Merge〔〕に格納し、マージソートによりソートするプログラムを組みたいのですが、出力が上手くソートされません。
プログラム内の★1と★2で区切ったあたりに問題があると思うのですが、どうも気づけません。
正しくソートし出力するにはどこを修正すればよいのでしょうか?
よろしくお願いします。
■プログラム
include <stdio.h>
include <stdlib.h>
include <time.h>
define N 8
int Merge[N], tmpmerge[N];
void merge_two(int fr1, int to1,int fr2, int to2)
{
int i, sw1, sw2, tmp1, tmp2;
sw1=0; sw2=0; tmp1=fr1; tmp2=fr2; for(i=fr1; i<to2; i++){tmpmerge[i] = Merge[i];}
★1
int j;
double tmpmerge = Merge[i];
for (j = i-1; j>fr1 && tmpmerge < Merge[j]; j--){
Merge[j+1] = Merge[j];
}
printf("\n");
printf("fr1=%d , to1=%d , fr2=%d , to2=%d\n" , fr1 , to1 , fr2 , to2);
for(j=0; j<8; j++){
printf("%d ",Merge[j]);
}
★1
}
void mergesort(int first, int last)
{
if (first < last) {
mergesort(first, (first+last)/2);
mergesort((first+last)/2+1, last);
merge_two(first, (first+last)/2, (first+last)/2+1, last);
}
}
★2
int main() {
int i , ransu;
srand((unsigned int)time(NULL));
for(i=0; i<8; i++)
{
ransu=rand()%100 + 1;
Merge[i] = ransu;
}
printf("Numbers: ");
for(i=0; i<8; i++){
printf("%d ",Merge[i]);
if(i%10==9){
printf("¥n");
}
}
★2
mergesort(0,N-1);
}
■出力結果
Numbers: 89 70 4 73 93 19 32 69
fr1=0 , to1=0 , fr2=1 , to2=1
89 70 4 73 93 19 32 69
fr1=2 , to1=2 , fr2=3 , to2=3
89 70 4 73 93 19 32 69
fr1=0 , to1=1 , fr2=2 , to2=3
89 70 4 73 93 19 32 69
fr1=4 , to1=4 , fr2=5 , to2=5
89 70 4 73 93 19 32 69
fr1=6 , to1=6 , fr2=7 , to2=7
89 70 4 73 93 19 32 69
fr1=4 , to1=5 , fr2=6 , to2=7
89 70 4 73 93 19 32 69
fr1=0 , to1=3 , fr2=4 , to2=7
89 70 4 73 93 19 32 69
↑すべてソートされず同じ並びになってしまいます…
回答2件
あなたの回答
tips
プレビュー