0

我已经定义了以下方法来对数组进行排序:

public int[] BubbleSort(int[] ints)
{
    for (int i = 0; i < ints.Length; i++)
    {
        if (ints[i] > ints[i + 1])
        {
            int tempValue = ints[i];
            ints[i] = ints[i + 1];
            ints[i + 1] = tempValue;         
        }
    }
    return ints;               
}

但是,我上面的实现是抛出 System.IndexOutOfRangeException :索引超出了数组的范围。可能是什么问题?

4

2 回答 2

5

去吧.Length - 1。此外,使用冒泡排序,您需要遍历数组,直到不再需要交换元素(这就是冒泡排序效率低下的原因):

public int[] BubbleSort(int[] ints)
{            
    bool swapped = true;
    while (swapped) 
    {
        swapped = false;
        for (int i = 0; i < ints.Length - 1; i++)
        {
            if (ints[i] > ints[i + 1])
            {
                swapped = true;
                int tempValue = ints[i];
                ints[i] = ints[i + 1];
                ints[i + 1] = tempValue;
            }     
        }
    }

    return ints;               
}
于 2012-10-19T00:29:37.067 回答
1
for (int i = 0; i < ints.Length; i++)
{
  if (ints[i] > ints[i + 1])

i == ints.Length - 1,ints[i + 1]是超出数组末尾的非法访问。您的循环逻辑有一个错误。

于 2012-10-19T00:26:42.470 回答