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
就会导致无限循环
简而言之:重置您的标志,并在其为真时循环。请描述错误和您尝试修复的内容。请描述错误和您尝试修复的内容。