- ベストアンサー
単純挿入法を使った整列プログラムの作成方法
- C++のプログラムにおいて、単純挿入法を使用して配列を整列する方法について解説します。
- まず、ランダムな整数配列を生成します。
- 次に、単純挿入法を使って配列を昇順に整列します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
void Sort(int *s, int n) { /* #2補足のアルゴリズム単体は間違ってないため,回答。 #見比べて理解してください。 #何故か関数内でnを宣言していないのに使っているのが気になったけど #理解しているなら他の変数宣言も無いと思うし…。 変更点。 1.宣言の不要な変数を全て削除。 2.配列aを軒並み配列sに。 */ int i; int j; int temp; for (i = 1; i < n; i++) { temp = s[i]; for (j = i; j > 0 && s[j-1] > temp; j--) { s[j] = s[j-1]; } s[j] = temp; } }
その他の回答 (4)
- himajin100000
- ベストアンサー率54% (1660/3060)
>引数で渡しているのだから、全く問題ないですよね。 ええ、もちろん、それを使うのが正しいです。 でもそれが解ってたら#2の補足で関数内でわざわざNを宣言する必要は無い→質問者さんが理解しているかちょっと危ういような気もする というだけの話
- asuncion
- ベストアンサー率33% (2127/6289)
>#3さん > #何故か関数内でnを宣言していないのに使っているのが気になったけど Sort()での話ですか?引数で渡しているのだから、全く問題ないですよね。
- asuncion
- ベストアンサー率33% (2127/6289)
> ネットで調べて単純挿入法というものはわかった もっと調べてください。 単純挿入法の考え方とともにサンプルコードを載せているサイトが見つかります。 もっとも、そのコードを単に丸写ししたのでは、 単純挿入法の考え方が本当に身につくかどうかは疑問です。
補足
void Sort(int *s, int n) { const int N = 100; int i,j,a[N],temp; for (i = 1; i < n; i++) { temp = a[i]; for (j = i; j > 0 && a[j-1] > temp; j--) { a[j] = a[j-1]; } a[j] = temp; } } このように作ったんですけど実行してもソートされないんですけど 何が違うんでしょうか?
- beefisdead
- ベストアンサー率63% (92/145)
その部分を補って完成させると良いと思いますよ。 「課題の丸投げ」は禁止されていますが、あなたが課題をやろうとして調べてもよく分からなかったことについての質問は禁止されておらず、そういうことを聞くために利用することはむしろ推奨されるでしょう。 調べた結果としてどうにも解けなくて、あなたが「何に」「どうして」困っているかを説明できるようになったらまた質問し直しに来てください。 とりあえず、この質問は違反ね。(違反でないなら補足をどうぞ)
補足
ネットで調べて単純挿入法というものはわかったんですが それをいざプログラムにしろと言われるとなかなかできないんです。
お礼
ありがとうございます。 またわからないことあったら教えてください。