2016-12-17 7 views
0

ok、バブルの並べ替えアルゴリズムを非常に基本的なものにすることにしました。私は2時間しか費やしていませんでした。これはプログラムの2回目の繰り返しです。今は燃えています。私は少し壁に当たったようだ。私はソートの各ラウンドで行った転置の数に基づいてIntegerを生成して表示するように設計しました(したがって、私はそれを見守り、それが下降トレンドであることを確かめることができます)。ループし、値 '36'を常に返します。ソートアルゴリズムが無限ループを生成するのはなぜですか? C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      bool sorted = false; 
      int[] data = new int[100]; 
      data = GenerateData(data); 

      while (sorted == false) 
      { 
       int count = Sort(data); 
       if (count == 0) 
       { 
        sorted = true; 
       } 
       else 
       { 
        Console.WriteLine("{0}", count); 
       } 
      } 
     } 

     public static int[] GenerateData(int[] data) 
     { 
      Random num = new Random(); 

      for (int x = 0; x < 100; x++) 
      { 
       data[x] = num.Next(0, 99); 
      } 
      return data; 
     } 

     public static int Sort (int[] data) 
     { 
      int TempA = 0; 
      int TempB = 101; 
      int count = 0; 

      for (int x =0; x<100; x++) 
      { 
       TempA = data[x]; 

       if ((x + 1) < 100) 
       { 
        TempB = data[(x + 1)]; 
       } 

       else 
       { 
        TempB = 101; 
       } 

       if (TempA > TempB) 
       { 
        data[x++] = TempA; 
        data[x] = TempB; 
        count++; 
       } 
      } 
      return count; 
     }   
    } 
} 
+6

良いデバッガが役に立つ状況に似ています – Plutonix

+0

Sortメソッドにコメントを追加して、正確に何を達成しようとしているのかを説明すると本当に役に立ちます。実際に何をしているのかを実際に解析するのが難しくなるような、たくさんのコードがハードコードされています。 – Prescott

+0

は、それを書いているときにそれについて考えることはありませんでした。コメントは非常に役に立ちます。 – Jonathan

答えて

1

私はそれは

data[x++] = TempA; 
data[x--] = TempB; 

それとも

data[x+1] = TempA; 
data[x] = TempB; 

そうでなければ、あなたのforループは終わるだろういずれかである必要があり

data[x++] = TempA; 
data[x] = TempB; 

次の2行に何か問題があると思いelemをスキップするents。

+0

例外的に良いキャッチがありました。コードの参照だけでなく、実際のインデックス値をインクリメントしていることがわかりました。あなたの提案通り、私は今それを変更します。しかし、私はそれがすべてそれを解決することを疑う。 – Jonathan

+0

まあ、あなたは完全にそれを修正したかもしれません。イムはあまりにも疲れてそれをすべてチェックしないでください。しかし、私はあなたがそれをしたように感じる。それはもはや無限にループしていません – Jonathan

+0

値を入れ替えるだけのようです。私はかなりC#はちょうどそれを行うための機能を持っていると確信しています。それができない場合でも、あなたはこの運動のための単純なスワップを書くことができます。 – greatwolf

関連する問題