2016-12-17 81 views
0

好的,決定我會亂搞,並創建一個非常基本的泡泡排序算法,我只花了幾個小時,這只是我的第二次迭代的程序,現在我有點燒了,並且我似乎碰到了一堵牆。我的設計是,它會根據它在每一輪排序中所做的換位次數來生成並顯示一個整數(所以我可以留意它並確保它向下趨勢),並且它陷入了無限循環,不斷返回值'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++] = TempA; 
data[x--] = TempB; 

或者

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

否則你for循環將結束跳過elem經濟需求。

+0

那裏特別好,我剛剛意識到我正在增加實際的索引值,而不僅僅是引用它的代碼。正如你所建議的,我現在會改變它。不過,我懷疑這會解決所有問題 – Jonathan

+0

好吧,先生,您可能已經完全解決了這個問題。 Imm太累了,無法檢查一切。但我覺得你做到了。它不再無限循環 – Jonathan

+0

它看起來像你只是想交換的價值。我很確定C#有一個功能可以做到這一點。即使沒有,你也可以爲這個練習寫一個簡單的交換。 – greatwolf