2011-10-20 72 views
0

我正在尝试一个基本的排序练习,我希望我可以接受一些可能的基本逻辑错误的帮助。冒泡排序逻辑错误

int[] numbers = new int[] { 2, 5, 11, 38, 24, 6, 9, 0, 83, 7 }; 
     for (int loop = 0; loop < numbers.Length; loop++) 
     { 
      Console.WriteLine(numbers[loop]); 
     } 
     Console.WriteLine("Performing a bubble sort"); 

     bool flag = false; 
     do 
     { 

      for (int loop = 0; loop < numbers.Length - 1; loop++) 
      { 
       if (numbers[loop] > numbers[loop + 1]) 
       { 

        int temporary = numbers[loop]; 
        numbers[loop] = numbers[loop + 1]; 
        numbers[loop + 1] = temporary; 
        flag = true; 
       } 

      } 
     } while (flag == false); 

     for (int loop = 0; loop < numbers.Length; loop++) 
     { 
      Console.WriteLine(numbers[loop]); 
     } 
+3

请描述什么是错的,你试图解决它。 – Jimmy

回答

1

您的代码有两个问题。第一,正如已经指出的那样,你需要循环长达​​。如果你给它一个更具表现力的名字,那将会更加清晰。 madeASwap或类似的东西很明显:do while(madeASwap)

另一个问题是,您需要在运行内部循环之前重置标记。没有这一点,只需检查false在一次迭代后就结束了,并且检查true会导致无限循环。

简而言之:重置您的标志,并循环,而它是真的。

+0

谢谢allot ...我现在明白了。 – Arianule

0

看看这里和迁移:

// array of integers to hold values 
private int[] a = new int[100]; 

// number of elements in array 
private int x; 

// Bubble Sort Algorithm 
public void sortArray() 
{ 
    int i; 
    int j; 
    int temp; 

    for(i = (x - 1); i >= 0; i--) 
    { 
    for(j = 1; j <= i; j++) 
    { 
     if(a[j-1] > a[j]) 
     { 
     temp = a[j-1]; 
     a[j-1] = a[j]; 
     a[j] = temp; 
     } 
    } 
    } 
} 
1

你的标志的逻辑是错误的。其他一切看起来都正确

的标志应该是指:

loop until we looped without making any swaps

但是,这是不是你的代码目前一样。

2

我不知道所有的错误,但有一点可以肯定的是,你的do/while循环应该是while(flag == true)而不是while(flag == false)。其中,当然,可以更简单地写为while(flag)

0

你的循环条件while(flag == false)应该读while(flag == true)

0

冒泡排序是不是一个合格的排序。在一次迭代中,最大的数字移动到最右边的单元格。所以在第一次迭代之后,最大的数字将被存储在最后一个单元格中。

for (int l = numbers.Length - 1; l > -1; l--) 
    for (int loop = 0; loop < l; loop++) { /* your code */ } 

而且你不需要flag(好吧,也许你需要的,但不是你犯的错误)

这里的算法的每次迭代后的输出:

2 5 11 24 6 9 0 38 7 83 
2 5 11 6 9 0 24 7 38 83 
2 5 6 9 0 11 7 24 38 83 
2 5 6 0 9 7 11 24 38 83 
2 5 0 6 7 9 11 24 38 83 
2 0 5 6 7 9 11 24 38 83 
0 2 5 6 7 9 11 24 38 83 
0 2 5 6 7 9 11 24 38 83 
0 2 5 6 7 9 11 24 38 83 
0 2 5 6 7 9 11 24 38 83