2016-12-17 57 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