2016-09-24 6 views
1

プログラミングにはとても慣れています。代入の場合、配列を昇順でソートできる関数を作成する必要があります。私は関数を書いたが、完全には機能しない。私はこのフォーラムですでにこのようなケースについて多くの質問を読んできましたが(しかし、バブルソートを検索しました)、私はまだ私の問題を解決できません。C言語での配列の値の並べ替え

私のコード:

void sortOnValue(float *values, int size) 
{ 
int i, d; 
float swap; 

    for (i = 0; i < (size - 1); i++) 
    { 
     for (d = 0; d < (size - 1 - i); d++); 
     { 
      if (values[d] > values[d+1]) 
      { 
       swap = values[d]; 
       values[d] = values[d+1]; 
       values[d+1] = swap; 
      } 
     } 
    } 
} 

void main() 
{ 
int i; 
float x, y; 
float val[10]; //1.5, 2.2, 7.3, 9.2, 7.4, 7.5, -8.0, 1.5, 12 
val[0] = 1.5; 
val[1] = 2.2; 
val[2] = 7.3; 
val[3] = 9.2; 
val[4] = 7.4; 
val[5] = 7.5; 
val[6] = -8.0; 
val[7] = 1.5; 
val[8] = 12; 

printValues(val, 10); 
sortOnValue(val, 10); 
printValues(val, 10); 
} 

私の出力:

Values: 1.500 -8.000 2.200 7.300 9.200 7.400 7.500 0.000 1.500 12.000 

それが機能しない理由の任意のアイデア?ループが終了する前に終了するためかもしれないと思うが、わからない。 また、配列に値を割り当てる効率的な方法は、私が行ったものよりもありますか?

ありがとうございました!

+1

ただし、配列のすべての要素を初期化しません。 –

+0

'float val [10] = {1.5,2.2,7.3,9.2,7.4,7.5、-8.0,1.5,12}; 'を割り当てる。この方法では、不特定の値も0に設定されます。 – MayeulC

+0

ありがとう!私はそれを試しました。値を分けてください。そのチップのおかげで –

答えて

1

は、この行をよく見る:

//    what's this? -------v 
    for (d = 0; d < (size - 1 - i); d++); 
    { 

あなたはこのforの終わりに浮遊セミコロンを持っています。結果として、ここには空のループがあります。次に、その下のブロックが毎回実行されます。

これを取り除くと、プログラムは正常に動作します。スタイルの問題として、それは次のようにそれを起動する文として同じ行のブロックの開口ブレースを持つことは良い習慣だ

for (d = 0; d < (size - 1 - i); d++) { 

のようなものの可能性を減らすのに役立ちますこれは起こっている。以前あなたは、アレイ内のすべての10の要素を初期化していなかった

float val[10] = { 1.5, 2.2, 7.3, 9.2, 7.4, 7.5, -8.0, 1.5, 12, 9.9 }; 

注:配列を初期化したい場合は

また、あなたはこのようにそれを行うことができます。私はここにもう一つの要素を加えて全体を埋める。

+0

ありがとうございました! –

1

変化を

(D = 0; D <(サイズ - 1 - I); D ++)。そしてD + I

が値[D + I]と[i]の値を比較した後、交換およびd + 1

(; D <サイズD ++ D = I + 1)のための

にそれに応じて。

+0

最後の値が初期化されていないので、 '-1'を削除すると* this *の例で何かが壊れる可能性があります。 – MayeulC

+0

私はその点に同意します。 –

関連する問題