高校三年生の合唱祭で何を歌いましたか?

タイトルの通りです。
関数の定義からわかりません。

質問者からの補足コメント

  • 昇順に並び替える関数がわからないです^^;

      補足日時:2020/07/08 22:14

A 回答 (3件)

ソート(並び替え)の関数としうのを馬鹿正直に汎用のソートアルゴリズムだと考えてしまうと、一気に情報処理の勉強とかをしてないと難しい話になってしまいます。



ソートのアルゴリズムは簡単なのから難しいのまで色々ありますが、問題とされているのは3つのint値なので、配列を比較して効率が云々みたいな本格的なものを求められているのとはちょっと違うのかなと思います。

関数はまぁ理解されたようなので、じゃあ並び替えってどうやったらいいのんというのを考えてみると、3つの数値をそれぞれ比較すればいいだけなので、関数はこんな感じになるでしょうか。

void sort_test3( int i1, int i2, int i3 ) {
 int tmp;
 //一番目を決める
 if( i1 > i2 ) {//一つ目が二つ目より大きい場合は入れ替える
  tmp = i2;
  i2 = i1;
  i1 = tmp;
 }
 if( i1 > i3 ) {//一つ目が三つ目より大きい場合は入れ替える
  tmp = i3;
  i3 = i1;
  i1 = tmp;
 }

 //二番目目を決める
 if( i2 > i3 ) {//二つ目が三つ目より大きい場合は入れ替える
  tmp = i3;
  i3 = i2;
  i2 = tmp;
 }
 printf( "%d, %d, %d", i1, i2, i3 );//結果出力
}


まぁ、ここまで書くのがあなたのためになるかは分からないのですが、まるまるコピーしてはい終わりではなく、何やってるかのコメント部分を読んで、どういうロジックが動くのかを想像し、入れ替え(並び替え)の超基本的なやり方を学んでください。

変数の入れ替えは入れ替えたい2つの変数+一時保存の変数の3つを使います。
一時に先に上書きする方の変数を入れて記憶。
一時に記憶させた方の変数にもう片方の変数を入れる。
もう片方の変数に一時記憶の内容を入れる。
です。

そして、3つの数値の並び替えは、まず1位を決定するために「if」条件文にて1と2、1と3つめの数値の大小を比較し、昇順なので1のほうが大きい場合は入れ替えます。

次に2位をきめないといけないので、2と3つめの数値の大小を比較して、2のほうが大きい場合は入れ替えます。


まぁ入門はこんな感じですが、一般的なソートの関数について知りたい場合はバブルソートやクイックソートなどで検索してみてください。

安直にライブラリ使うのも引っかかってしまうかもしれませんが、たしかVisual Studio(無料)のソースの中探せばソート関連の生のアルゴリズムがかかれたソースもあったかと思います。今の配布されてるバージョンでもあるかまでは分かりませんが。

私はライブラリのソートは重い上に融通が利かないので、c++ではクイックソートのアルゴリズムを自己流にしたものを使用しています。

頑張ってください。
    • good
    • 0
この回答へのお礼

皆さんの回答を元にプログラムを作成してみたらできました!
ありがとうございます☺️

お礼日時:2020/07/13 02:32

std::sort ってのがあるんだよ.

    • good
    • 1

関数は



返り値の型 関数名(引数リスト)
{
関数本体
}

のように定義します.
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報