C# 对数组排序会引发以下错误System.IndexOutOfRangeException:索引超出了数组的界限

C# 对数组排序会引发以下错误System.IndexOutOfRangeException:索引超出了数组的界限,c#,arrays,C#,Arrays,我定义了以下方法对数组进行排序: 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]

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

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;               
}
public int[]BubbleSort(int[]ints)
{
for(int i=0;i整数[i+1])
{
int tempValue=ints[i];
整数[i]=整数[i+1];
ints[i+1]=临时值;
}
}
返回整数;
}
但是,我上面的实现是抛出System.IndexOutOfRangeException:索引超出了数组的边界。可能有什么问题?

for(int i=0;ifor (int i = 0; i < ints.Length; i++)
{
  if (ints[i] > ints[i + 1])
{ if(整数[i]>整数[i+1])
i==ints.Length-1
时,
ints[i+1]
是超出数组末尾的非法访问。您的循环逻辑有一个off by one错误。

for(int i=0;i整数[i+1])

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

改为转到
.Length-1
。此外,对于,您需要在数组上迭代,直到不再交换更多元素为止(这就是气泡排序效率低下的原因):

public int[]BubbleSort(int[]ints)
{            
bool swapped=true;
while(交换)
{
交换=假;
for(int i=0;i整数[i+1])
{
交换=真;
int tempValue=ints[i];
整数[i]=整数[i+1];
ints[i+1]=临时值;
}     
}
}
返回整数;
}

改为转到
.Length-1
。此外,使用,您需要迭代数组,直到不再交换任何元素(这就是气泡排序效率低下的原因):

public int[]BubbleSort(int[]ints)
{            
bool swapped=true;
while(交换)
{
交换=假;
for(int i=0;i整数[i+1])
{
交换=真;
int tempValue=ints[i];
整数[i]=整数[i+1];
ints[i+1]=临时值;
}     
}
}
返回整数;
}

for(int i=0;i3,2,1。在第一次交换后,你得到
2,3,1
,然后它继续进行下一次交换
2,1,3
,并且交换完成。但它从未重新检查索引0和索引1是否在ord中er.for(int i=0;i3,2,1。在第一次交换后,你得到
2,3,1
,然后它继续进行下一次交换
2,1,3
,并且交换完成。但它从未重新检查索引0和索引1是否在ord中呃。你是出于教育目的实现的,还是需要对int的列表进行排序,这是你的解决方案?你是出于教育目的实现的,还是需要对int的列表进行排序,这是你的解决方案?虽然它工作得很好,但我不确定在我使用时如何访问数组中的最后一个元素for(int i=0;iith元素上,如果有必要,可以访问并交换
i+1
th元素。拿一张纸,写出每次迭代的数组值,这将是一个很大的帮助。虽然它工作得很好,但我不确定在我有时间时如何访问数组中的最后一个元素(inti=0;iith元素上,如果需要,可以访问并交换
i+1
th元素。拿一张纸,写出每次迭代的数组值,这将是一个很大的帮助。
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;               
}