Quicksort索引超出范围异常

时间:2013-02-01 14:16:55

标签: c#

我尝试使用 QuickSort 的其他变体,其中我将两个ListBoxes排序。

这是我的代码:

class cS
{
    public static int[] mQS(int[] iar)
    {
        //divide and conquer
        if (iar.Length < 3)
        {
            if (iar.Length == 2)
            {
                if (iar[0] > iar[1])
                {
                    //wissel
                    int T = iar[1];
                    iar[1] = iar[0];
                    iar[0] = T;
                }
            }
        }
        else
        {
            int size = iar.Length;
            int sum = 0;
            int average = 0;
            for (int i = 0; i < size; i++)
            {
                sum += iar[i];
            }
            average = sum / size; 

            int lk = 1, lg = 1;
            for (int i = 0; i < size; i++)
            {
                if(iar[i]<=average)
                {
                    lk++;
                }
            else
            {
                lg++;
            }
        }

        int[] ak = new int[lk];
        int[] ag = new int[lg];
        lk--; lg--;

        for (int i = 0; i < average; i++)
        {
            if (iar[i] <= average)
            {
                ak[lk]=iar[i];
                lk--; 
            }
            else
            {
                ag[lg] = iar[i];
                lg--;
            }
        }

        if (!Allegelijk(ak)) {ak= mQS(ak);}
        if(!Allegelijk(ag)) {ag = mQS(ag);}
        // plak weer aan elkaar in iar
        for (int i = 0; i < ak.Length; i++)
        {
            iar[i] = ak[i];
        }
        for (int i = 0; i < ag.Length; i++)
        {
            iar[i + ak.Length] = ag[i];
        }
    }
    return iar;
}

private static  bool allEqual(int[] ar)
{
    bool bG = true;
    for (int i = 1; i < ar.Length; i++)
    {
        if (ar[i] != ar[0])
        {
            bG = false;
            break;
        }
     }
     return bG;
 }

}

}

但是在跑步时我得到了这个错误:

index out of range exception at the line :

  if (iar[i] <= average>

任何人都可以解释发生了什么以及如何解决它吗?

2 个答案:

答案 0 :(得分:1)

来自评论:

for (int i = 0; i < average; i++)行应该size而不是average

答案 1 :(得分:0)

在执行期间的某个时刻,sum的值变得足够大,average的值等于sum / size,大于iar.Length 。因此,for循环中i的值最终会达到大于或等于iar.Length的值。