C#,index超出了数组冒泡排序的范围

时间:2018-05-04 11:37:07

标签: c# bubble-sort

我正在尝试制作一个冒泡排序程序,可以从底部对整数数组进行排序。

var list = new int[] {5,0,2}; //array

for (int i = 0; i < list.Length; i++)
{
    while (list[i] > list[i+1])
    {
        list[i] = list[i + 1];
    }
}
Console.WriteLine(string.Join(",", list));

我在while (list[i] > list[i+1])中得到索引超出范围错误。我的代码出了什么问题?我的状况不好吗?

2 个答案:

答案 0 :(得分:4)

  

我的状况不好吗?

不,您的for循环条件不正确。在这里查看循环,并考虑循环体内i的值。

for (int i = 0; i < list.Length; i++)

确保list[i]始终有效。但是您正在使用list[i + 1],因此您需要确保i + 1是数组的有效索引。最简单的方法是减少条件限制:

for (int i = 0; i < list.Length - 1; i++)

这将删除该异常,但您将留下此while循环:

while (list[i] > list[i+1])
{
    list[i] = list[i + 1];
}

您不会在循环中修改i的值,这意味着只有永远才会执行一次 - 只要您在&#39;我执行了该循环的主体,条件将变为假。因此将它写成if语句会更清楚:

if (list[i] > list[i+1])
{
    list[i] = list[i + 1];
}

现在我怀疑不是你想要的东西 - 你可能想要交换值而不仅仅是分配,而你可能想要一个循环,但那是相当的超出了直接问题的范围。

答案 1 :(得分:0)

感谢所有人的帮助,最后我使用添加bool来保证检查数组是否需要再次重复内循环:

        var list = new int[] {5,7,0,2}; //array

        bool alert = true;

        while (alert == true)
        {
            alert = false;
            for (int i = 0; i < list.Length - 1; i++)
            {
                while (list[i] > list[i + 1])
                {
                    int temp = list[i];
                    list[i] = list[i + 1];
                    list[i + 1] = temp;
                    alert = true;
                }
            }
        }
        Console.WriteLine(string.Join(",", list));
        Console.ReadKey();