プロが教える店舗&オフィスのセキュリティ対策術

私は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

A 回答 (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.h …
    • good
    • 0

惜しい。

近い所まで来てるんですが。

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;
    }
  }
}

となります。
    • good
    • 0

「バブルソート」、「クイックソート」


を検索するとヒント(答?)になるかと。
    • good
    • 0

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