- ベストアンサー
C言語超初心者のための基本交換法・基本挿入法プログラミング
- C言語超初心者のための基本交換法・基本挿入法プログラミングの解説です。
- 課題として与えられた数列を大きい順に並べ直す方法をC言語で実装する方法を解説します。
- 基本交換法と基本挿入法のプログラムを説明し、それぞれの変数の役割についても詳しく説明します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>多分どちらも最後の出力の当たりがおかしいと思うのですが 変数iとjを見直してください。 >【バブルソート】 ANo.2で指示したとおりに変更されていません。 >【挿入ソート】 if(a[i-1]<tmp) と不等号を変更したように, while(j>0&&a[j-1]>tmp); の a[j-1]>tmp も同様に不等号を逆にしてください。 指摘し忘れてました,失礼。 >doと&&は未学習なのですが、違う表記とかってできますか? do~while(後判断)を while(前判断)に変更する方はともかく, &&(かつ)による複合条件式が使えないと 自然な発想でコードが書けないし, 違う表記をしてもそれもまた未学習だとなる恐れがあるので, 私は今回はパスします。
その他の回答 (2)
- jjon-com
- ベストアンサー率61% (1599/2592)
▼バブルソート(無駄な処理がありますの方) if(a[i]>a[i+1]){ tmp=a[i]; a[i]=a[i+1]; a[i+1]=tmp; } を次のように変更。 if(a[j]<a[j+1]){ tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } ▼挿入ソート if (data[i-1] > tmp) { の不等号を < に変更。
補足
ありがとうございます 参考にしたんですが、上手くできません。 多分どちらも最後の出力の当たりがおかしいと思うのですが・・・ 何がおかしいですか? 【バブルソート】 #include <stdio.h> void main(void) { int i,j,tmp; int a[]={6,2,5,3,1,7,4}; for(i=0;i<6;i++) { for(j=0;j<6;j++) { if(a[i]<a[j+1]) { tmp=a[j]; a[j] =a[j+1]; a[j+1]=tmp; } } } for(i=0;i<7;i++) {printf(“%d “,a[j]);} } 【挿入ソート】 #include <stdio.h> void main(void) { int i,j,tmp; int a[]={6,2,5,3,1,7,4}; for(i=1;i<7;i++) { tmp=a[i]; if(a[i-1]<tmp) { j=i; do { a[j]=a[j-1]; j--; } while(j>0&&a[j-1]>tmp); a[j]=tmp; } } for(i=0;i<7;i++) {printf(“%d “,a[j]);} } *それと、このソートで出てくるdoと&&は未学習なのですが、違う表記とかってできますか? もしできたらでいいのですが…
- jjon-com
- ベストアンサー率61% (1599/2592)
>ググッてみたところ、乗っているのは数字を小さい順に並べるものばかり そのコードが載っているURLを提示してください。 おそらく数か所を変更するだけで質問者が望むアルゴリズムになるでしょう。
補足
早速の回答ありがとうございます。 以下のURLで見つけました。 バブルソート http://www.hrtdotnet.jp/pro/c/step3/step3_1.html (無駄な処理がありますの方) 挿入ソート http://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5%E3%82%BD%E3%83%BC%E3%83%88 よろしくお願いします。
お礼
できました!!! 何回もコメントしていただいて 本当にありがとうございました>< 本当に助かりました。