2010-12-10 18 views
4

私は、数値の配列をとり、それらを低から高にソートする関数を持っています。これまでのところ、私はこのアルゴリズムを持っていますが、出力は私が期待しているものではありません。誰かがそれに光を当てることはできますか?私はCライブラリ関数を使用することはできません。Cで配列を低から高にソートする(qsortを使わないで)

/* 
    Sort "count" numbers stored in array numbers[] in non-decreasing order. 
    There may be duplicate numbers in the array. 
    You may use any sorting algorithm that you know. 
*/ 

void sort(double numbers[], int count) 
{ 
    int i, j, k; 
    //printf("%d", count); 

    double temp; 
    do{ 
     j = 0; 
     for (i = 0;i<=count;i++){ 
       if (numbers[i] > numbers[i+1]){//this was numbers[k], which was an error 
        j = 1; 
        temp = numbers[i]; 
        numbers[i] = numbers[i+1]; 
        numbers[i+1] = temp; 
       } 
      } 
    } while (j == 1); 
} 
+0

'K 'とは何であるに条件を変更できますか? – sje397

+2

intです。 :-) – Eiko

答えて

5

forループi<=countの条件が正しくありません。

配列の有効なインデックスは0~count-1です。
あなたは、ループ内でのインデックスi+1で値をアクセスしているので:

if (numbers[i] > numbers[i+1]) 

iは... 0からcount-2に値を取るので、i<=count-2またはi<count-1

+0

これは今、感謝しています。 –

+0

それは知っていますが、@stillstandingが与えるwikiリンクを読むのを忘れないでください。実装を最適化することができます。 – codaddict

0

kの値が使用されますが、変数は決して初期化されず、割り当てられません。 count要素を含む配列は、あなたがkをinitalisedいないcount-1

0

最大のインデックスを持っている場合、いくつかの時点で、あなたのコードは、値numbers[count]にアクセスしようとします。

アルゴリズムは、1つの数字だけ移動するとすぐに停止します。あなたはそれらのすべてを動かす必要があります。

whileループの外側でkのforループが見つからないと思いますが、ここで何をしようとしているのか分からないので、私は確信できません。

独自のqsort()関数を実装できないのはなぜですか?それは許されますか?オンラインでいくつかのソートアルゴリズムを読んでみてください。

0

IF(番号[I]>番号[K]){

おそらくあるべきで

IF(番号[I]>番号[I + 1]){

k ISN」まったく使用されていません。

for (i = 0;i <= count;i++){ 

はおそらく

for (i = 0; i < count-1;i++){ 
カウント-1を0から唯一の要素があるとして

、その後、あなたは次のいずれかに比較している必要があります。 jの名前はわかりません。 didSwapというブール値にします。そして、あなたのコードを再考してください。ちょうどその逆です...

+0

申し訳ありません[k]前回の編集です。私はこれを[i + 1に変更しましたが、役に立たなかった... –

+0

それで、私はカウントのことに言及しました - しかし、それはテキストを混乱させ、完全なコードを表示しませんでした... – Eiko

関連する問題