C# 冒泡排序逻辑错误

C# 冒泡排序逻辑错误,c#,C#,我在尝试一个基本的排序练习,我希望我能得到一些帮助,可能是一个基本的逻辑错误 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.Writ

我在尝试一个基本的排序练习,我希望我能得到一些帮助,可能是一个基本的逻辑错误

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]);
        }
int[]numbers=新的int[]{2,5,11,38,24,6,9,0,83,7};
for(int-loop=0;loop数字[循环+1])
{
int临时=数字[循环];
数字[循环]=数字[循环+1];
编号[循环+1]=临时;
flag=true;
}
}
}while(flag==false);
for(int-loop=0;loop
查看此处并迁移:

// 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;
      }
    }
  }
}
//保存值的整数数组
私有整数[]a=新整数[100];
//数组中的元素数
私人INTX;
//气泡排序算法
公共无效Sortaray()
{
int i;
int j;
内部温度;
对于(i=(x-1);i>=0;i--)
{
对于(j=1;ja[j])
{
温度=a[j-1];
a[j-1]=a[j];
a[j]=温度;
}
}
}
}

查看此处并迁移:

// 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;
      }
    }
  }
}
//保存值的整数数组
私有整数[]a=新整数[100];
//数组中的元素数
私人INTX;
//气泡排序算法
公共无效Sortaray()
{
int i;
int j;
内部温度;
对于(i=(x-1);i>=0;i--)
{
对于(j=1;ja[j])
{
温度=a[j-1];
a[j-1]=a[j];
a[j]=温度;
}
}
}
}

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

国旗的意思应该是:

循环,直到我们循环而不进行任何交换


但您的代码目前并不是这样做的。

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

国旗的意思应该是:

循环,直到我们循环而不进行任何交换


但这不是您的代码当前所做的。

我不知道所有错误,但有一件事可以肯定,您的do/while循环应该在
while(flag==true)
时进行,而不是
while(flag==false)
时进行。当然,可以更简单地写为
while(flag)

我不知道所有的错误,但有一点可以肯定的是,do/while循环应该在
while(flag==true)
时进行,而不是
while(flag==false)
时进行。当然,可以更简单地写为
while(flag)
您的循环条件
while(flag==false)
应该读
while(flag==true)
您的循环条件
while(flag==false)
应该读
while(flag==true)
冒泡排序不是一次排序。在一次迭代中,最大的数字移动到最右边的单元格。因此,在第一次迭代之后,最大的数字将存储在最后一个单元格中

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

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

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

您的代码有两个问题。第一,正如已经指出的,只要
flag==true
,就需要循环。如果你给它起了一个更具表现力的名字,那就更清楚了
madeASwap
或者类似的东西可以让事情变得显而易见:
Dowhile(madeASwap)

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


简而言之:重置您的标志,并在其为真时循环。

您的代码有两个问题。第一,正如已经指出的,只要
flag==true
,就需要循环。如果你给它起了一个更具表现力的名字,那就更清楚了
madeASwap
或者类似的东西可以让事情变得显而易见:
Dowhile(madeASwap)

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


简而言之:重置您的标志,并在其为真时循环。

请描述错误和您尝试修复的内容。请描述错误和您尝试修复的内容。