• 締切済み

昇順に並べ替えるプログラム

(C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムはどう作成すればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45

みんなの回答

  • fujic-1990
  • ベストアンサー率55% (4505/8062)
回答No.2

 失礼ですが、fscanf()など、C言語の単語や組み合わせは分かっていらっしゃるんですよね。そして、並べ替えのアルゴリズムが分からないのですよね?  理屈は、内部で何をしているか分からない関数を使うよりベーシックなBASICのほうが分かり易いと思いますので、今は亡きMZ80BパソコンについていたHuBASICで最小限だけ書きますので、Cの単語に置き換えてください。  ちなみに以下は、泡立て法(隣接交換法、バブルソート)というやり方です。ほかにも方法はありますが、これが、一番時間がかかるものの、一番流れが理解し易いソートです。 1 N=10     ※データー数の設定(質問文では3だが余裕をみて) 2 DIM A(N)     ※配列変数を10個用意 3 FOR I=1 TO N     ※1からデーター数Nまで、Iの値を増やしていく 4  READ A(I)     ※データーを読み込んで変数A(I)に格納。例えばA(1)には45が入る 5 NEXT     ※IがNになるまで3へ戻って、繰り返す。 6 FOR UP=2 TO N-1 7  FOR I=N TO UP STEP -1     ※Iの値がNからUPの値になるまで、1つずつ減らして繰り返す 8   IF A(I-1)>A(I) THEN B=A(I-1) : A(I-1)=A(I) : A(I)=b     ※もしA(9)がA(10)より大きいなら、A(9)の中の値をいったんBに     入れて保存し、A(9)にA(10)の値を入れる。そしてA(10)にBの値     を入れる。つまり、A(9)とA(10)の値を入れ替える。      もしA(9)がA(10)より小さいか、等しいなら、なにもしないで     次の行へ行く 9  NXT I     ※7行目へ戻る 10 NXT UP     ※6行目へ戻る 11 FOR I=1 TO N 12  PRINT A(I)     ※A(I)の中の値を順番に表示する 13 NEXT 14 DATA 45,43,38,21,11,5,51,49,60,28  で、(数値を縦に並べた場合)小さい数字が、まるで泡のように、上へ上へと昇っていきます・・・ どこかで間違っていなければ。(但し、これはそこまで手の込んだプログラムではないので、数が入れ替えられていく様子は表示されません)  8行目の不等号の向きを変えると降順になります。  昔の冗談で、正しくプログラムを書いたのに答えがでない。なぜだなぜだと三日三晩考えたが分からない。4日目にフッと気がついた。答えを表示しろという命令(PRINT)が抜けていた、というのがあります。1つ間違えると正解が出ないのでご勘弁を。

  • f272
  • ベストアンサー率46% (8469/18132)
回答No.1

3つの整数を読む。(i1,i2,i3とする) i1>i2であればi1とi2を交換する i2>i3であればi2とi3を交換する i1>i2であればi1とi2を交換する 3つの整数を書く。 以上です。

関連するQ&A