0

これが私のクラスの設計方法です:

    class MergeSort
    {
        int[] mArray;
        public MergeSort(int[] A)
        {
            mArray = A;
        }
        void Merge(int[] A,int p ,int q, int r)
        {
            int n1 = q - p + r;
            int i = 0, j = 0;
            int n2 = r - q;
            int[] left = new int[n1+1];
            int[] right = new int[n2+1];
            for ( i = 0; i < n1; i++)
                left[i] = A[p + i - 1];
            for ( i = 0; i < n2; i++)
                right[i] = A[q + i];
            left[n1] = Int32.MaxValue;
            right[n2] = Int32.MaxValue;
            i = j = 0;
            for (int k = p; k < r; k++)
            {
                if (left[i] <= right[j])
                {
                    A[k] = left[i];
                    i++;
                }
                else
                {
                    A[k] = right[j];
                    j++;
                }
            }

        }
        public void Merge_Sort(int[] A, int p, int r)
        {
            int q = 0;
            mArray = A;
            if(p<r)
            {
                q = (p+r)/2;
                Merge_Sort(A,p,q);
                Merge_Sort(A, q + 1, r);
                Merge(A,p,q,r);
            }
        }
        public string show()
        {
            StringBuilder sb = new StringBuilder(); 
            for (int i = 0; i < mArray.Length; i++)
            {
                sb.Append(mArray[i].ToString() + " ");
            }
            return sb.ToString();
        }
    }

そして、これが私がソートを行う方法です:

        int[] arr = { 10, 12, 5, 6, 30, 1, 11, 120, 12 };
        MergeSort ms = new MergeSort(arr);
        ms.Merge_Sort(arr, 0, arr.Length );
        MessageBox.Show(ms.show());

しかしIndex was outside the bounds of the array.、関数の多くの場所でエラーが発生し続けMergeます。CLRS(Coremen) の本に記載されているアルゴリズムを実装しようとしました。しかし、私はこのエラーを受け取り続けています.3日以来、私はそれを続けています.

4

1 に答える 1

1

left[i] = A[p + i - 1];パラメータに間違った値を渡しているため、行にエラーがあります。確かに、その行でpはゼロです。loop の最初の実行では、配列i=0内の結果の位置は であり、以下に示すように IndexOutOfRange 例外が発生します。A-1

ここに画像の説明を入力

于 2013-11-03T16:50:50.090 に答える