• 締切済み

小さい順

私はC言語初心者で、今本などをみながら独学で学んでいます。 配列の値を小さい順に並べたいのですがうまくいきません・・・プログラムは以下のようにしました。 #include <stdio.h> int main(void){ int ten[5] = {5,1,4,2,3}; int i,j,hako,a = 1,k = 1; for(i = 0;i <= 3;i++){ if(i == 2){ k++;} if(i == 3){ k = k + 1;} for(j = 4;j > a;j--){ if(ten[i] > ten[k]){ hako = ten[i]; ten[i] = ten[k]; ten[k] = hako;} k++;} a++; k = k - 3; } for(i = 0;i < 5;i++){ printf("%d\n",ten[i]);} return 0;} こうしたらよいなどヒントでもお願いしますm(__)m

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

ソートの手法はたくさんあります。キーワードだけ挙げますが 選択ソート、バブルソート、単純挿入ソート、コームソート、シェルソート、 クイックソート、マージソート、ヒープソート、 基数ソート、ビンソート、などなど。 #通称「バカソート(bogosort)」なんてもあったりしますが #2 さんが説明で挙げているのはバブルソートではありません。 バブルソートは隣り合った要素同士で比較を行いますが、 #2の例はそうなっていません。 適当なソートの手順を言葉で説明すると(#2のでもいいんですけど)、 配列要素が5個だったとして、 ・0~4番目で一番小さな要素を見つけて、それと0番目を交換する ・1~4番目で一番小さな要素を見つけて、それと1番目を交換する ・2~4番目で一番小さな要素を見つけて、それと2番目を交換する ・3~4番目で一番小さな要素を見つけて、それと3番目を交換する というのを、二重ループで組むのが分かりやすいんじゃないかと。 Cによるバブルソートの例を参考URLに挙げておきます。 もろに答えになっているので、参照するときはそのつもりで。

参考URL:
http://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

惜しい。近い所まで来てるんですが。 5つの要素のソートの基本は、 1番目と、2~5番目を順に比べ、1番目が大きい場合は入れ換える。 2番目と、3~5番目を順に比べ、2番目が大きい場合は入れ換える。 3番目と、4、5番目を順に比べ、3番目が大きい場合は入れ換える。 4番目と、5番目を比べ、4番目が大きい場合は入れ換える。 です。 比較と入れ換えをするたびに、一番小さい値が配列の前の方に泡のように浮き上がって来るので、この方法のソートを「バブルソート(泡の並び替え)」と呼びます。 for文で書くと for (i = 0;i < (5-1);i++) { /* 1番目から最後の1つ手前まで */   for (j = i + 1;j < 5;j++) { /* iの次から最後まで */     if (ten[i] > ten[j]) {       hako = ten[i];       ten[i] = ten[j];       ten[j] = hako;     }   } } となります。

  • Ikonos00
  • ベストアンサー率28% (86/302)
回答No.1

「バブルソート」、「クイックソート」 を検索するとヒント(答?)になるかと。

関連するQ&A

専門家に質問してみよう