![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつも大変お世話になっておりますm(_ _)m
アルゴリズム初心者なのですが、併合処理ソートをC言語で自作しています。しかし途中で行き詰ってしまい困っております。
私が作成したコードは以下になります。
void merge(int D[], int left, int mid, int right)
{
int x, y, i, M[50000];
x=left;
y=mid+1;
for(i=0; i<=right-left; i=i+1){
if((x != mid+1)&&(y != right+1))
{
if (D[x]<D[y]){
M[i]=D[x];
x=x+1;
}
else if (D[x]=D[y]){
M[i]=D[x];
x=x+1;
i=i+1;
M[i]=D[y];
y=y+1;
}
else {
M[i]=D[y];
y=y+1;
}
}
if(x == mid+1){
M[i]=D[y];
y=y+1;
}
if(y == right+1){
M[i]=D[x];
x=x+1;
}
}
for(i=left; i<=right-left; i=i+1){
D[i]=M[i];
}
}
void mergesort(int D[], int left, int right)
{
int mid;
if(left != right){
mid=(left+right)/2;
if(left < mid) mergesort(D,left,mid);
if(right > mid+1) mergesort(D,mid+1,right);
merge(D,left,mid,right);
}
}
入力は五桁程度の正の整数の昇順並び替えで、↑のコードの中には
入力と出力に関するコードは含んでいません。入力出力部分に誤りはないと思われます。
出力しても正しく昇順に並んでくれません。。。
どなたかご教授ご指導お願い致しますm(_ _)m
No.2ベストアンサー
- 回答日時:
■構文上の問題点
【誤】
else if (D[x]=D[y]){
【正】
else if (D[x]==D[y]){
■ロジック上の問題点
次の処理に前にxまたはyが更新されて,この処理に入るがiが更新されない為,M[i]の値が上書きされて破壊されます。
☆continueとかelse句とかで解決出来ると思います。
if(x == mid+1){
M[i]=D[y];
y=y+1;
}
if(y == right+1){
M[i]=D[x];
x=x+1;
}
たぶん,まだ問題があるかもしれませんが,あとは小さい要素数でトレースしてロジックの完成度を確認してみては。
皆さんありがとうございます。
お二人にご指摘して頂いたところを修正したところ、入力がそのまま出力されるようになりました。
修正したのは上から13行目からで、以下のように修正しました。
else if (D[x]==D[y]){
M[i]=D[x];
x=x+1;
i=i+1;
M[i]=D[y];
y=y+1;
}
else {
M[i]=D[y];
y=y+1;
}
}
if(x == mid+1){
M[i]=D[y];
y=y+1;
}
else{
M[i]=D[x];
x=x+1;
}
}
また何かございましたらよろしくお願いしますm(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- JavaScript 台形公式 2 2022/12/21 18:38
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- 英語 英文の添削お願いします。【長文です。】 マッチングアプリで相手を言い負かしている時のやつです。 色々 1 2023/07/01 02:12
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
16bppBMPの仕様について
-
2の補数を計算するプログラム
-
C言語プログラミング 漸化式に...
-
併合処理ソートについて
-
画像の拡大・縮小
-
argvのNULLチェック
-
C言語の問題
-
returnの使い方
-
c言語のリダイレクトによる円...
-
吸湿性のあるものを天秤で秤量...
-
2÷3などの余りについて
-
プログラミング初心者です。 Py...
-
printf で二進表示を行いたい。
-
マイナスからプラスへ転じた時...
-
【C言語教えてください】sin波...
-
O(n log n)について2
-
エクセルのクイックアクセスツ...
-
「Aに対するBの割合」と「Aに対...
-
プログラムで関数は使わない方...
-
コンパイルエラーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報