气泡排序按相反顺序打印出来
本文关键字:打印 顺序 排序 气泡 | 更新日期: 2023-09-27 18:26:57
我已经写了一个bubblesort,但是,当我打印出数组时,它是排序的,但它以最高的数字开始,以最低的数字结束。
public int[] BubbleSort(int[] unsortedArray)
{
for(int i = 0; i < unsortedArray.Length; i++)
for(int j = 0; j < unsortedArray.Length; j++)
if(unsortedArray[i] < unsortedArray[j])
{
int temp = unsortedArray[i];
unsortedArray[i] = unsortedArray[j];
unsortedArray[j] = temp;
}
return unsortedArray;
}
有人能解释一下为什么名单颠倒了吗。
编辑:对不起,粘贴了错误的代码。
当行读取if(unsortedArray[i]<unsortedArray[j])这个列表是按从低到高的顺序排列的,但是,这在逻辑上没有意义。如果i低于j,交换它们。
可能更好,因为:
public int[] BubbleSort(int[] unsortedArray)
{
return unsortedArray.OrderBy(x=>x).ToArray();
}
原始版本的一些问题是,i
和j
迭代过多,它仍然可以工作,但它进行了不必要的迭代,不会影响结果,而且你的条件unsortedArray[i] < unsortedArray[j]
是向后的。
public int[] BubbleSort(int[] unsortedArray)
{
for(int i = 0; i < unsortedArray.Length-1; i++)
for(int j = i+1; j < unsortedArray.Length; j++)
if(unsortedArray[i] > unsortedArray[j])
{
int temp = unsortedArray[i];
unsortedArray[i] = unsortedArray[j];
unsortedArray[j] = temp;
}
return unsortedArray;
}
优化气泡排序:
public int[] BubbleSort(int[] unsortedArray)
{
var n=unsortedArray.Length;
while(n>0)
{
var newn=0;
for(var i=1;i<=n-1;i++)
{
if(unsortedArray[i-1]>unsortedArray[i])
{
var temp = unsortedArray[i];
unsortedArray[i] = unsortedArray[i-1];
unsortedArray[i-1] = temp;
newn=i;
}
}
n=newn;
}
}
这是一个条件
if(unsortedArray[i] < unsortedArray[j])
应该是
if(unsortedArray[j] < unsortedArray[i])
编辑:回答您的编辑。
您希望unsortedArray[i]
中的元素在运行内部循环后具有最低值。这意味着只有当你遇到unsortedArray[j]
时,你才能将其关闭,这比unsortedArray[i]
中的当前值要小。
如果unsortedArray[i]
已经是较低的值,则将其保留在原来的位置。
中的比较
if(unsortedArray[i] < unsortedArray[j])
应该是
if(unsortedArray[i] > unsortedArray[j])
int[] bd = new int[] { 25, 35, 104, 30, 89, 30, 42, 11, 8, 4, 55, 65, 98, 542, 2 };
for (int rnd = bd.Length; rnd > 0; rnd--)
{
for (int i = bd.Length - 1 ; i >= 0; i--)
{
if (i != 0)
{
if (bd[i - 1] < bd[i])
{
temp = bd[i];
bd[i] = bd[i - 1];
bd[i - 1] = temp;
}
}
}
}
for (int j = 0; j <= bd.Length - 1; j++)
{
Console.Write(bd[j] + Environment.NewLine);
}