2016-12-09 1 views
0

3つのhelpers.cプログラムを設定しました。これはhaystackの合計10個まで完璧に機能しますが、Control-Dを押すと動作が停止します。乾草の10。代わりに、プログラムは行をスキップし、私は自由にパッドのように書くことができます。 haystacksでは3または4を渡すことができないので、私のプログラムはCheck50に合格できません。誰にもこの問題の解決策がありますか?あなたは私のコードを必要とする場合にはCS50x pset3

は、ここにある:

bool search(int value, int values[], int n) 
{ 
    if(value < 0) 
    { 
     return false; 
    } 

    for(int i = 0; i < n; i++) 
    { 
     if (value == values[i]) 
     { 
      return true; 
     } 
    } 

    return false; 

} 

/** 
* Sorts array of n values. 
*/ 
void sort(int values[], int n) 
{ 
    bool tf; 
    do 
    { 
     tf = false; 
     for(int i=0; i < n-1; i++) 
     { 
      if(values[i] > values[i+1]) 
      { 
       int temp = values[i]; 
       values[i] = values[i+1]; 
       values[i+1] = temp; 
       tf = true; 
      } 
     } 
    } 
    while(tf == false); 
    return; 
} 

答えて

0

あなたのソートアルゴリズムは欠陥があります。それは配列全体の1ラウンドを取るだけで、部分的に整列されますが完全に整列しません。

バブルソート(https://en.wikipedia.org/wiki/Bubble_sortまたはcs50の講義を参照してください)を使用することができますが、そのコードはコースの名誉コードに反するものではありません。

+0

ありがとうございます。 2番目の "j"ループを作ることによって、正しい軌道に乗ることができますか? –

+0

はい、種類はありませんし、何も使用していないwhileループを削除します。 –

+0

@SamuelHanssenまた、[bubble-sort](http://pastebin.com/sheqN11j)の非常に一般的なアルゴリズムであるスワップ検出と一緒に、降順で上下限とinner-forを持つouter-whileを使用することもできます。 – WhozCraig