c# - C# 中的这个 QuickSort 算法有什么问题?

标签 c# algorithm quicksort

遗憾的是,我在使用快速排序时也遇到了问题。我已经与其他学生讨论过并尝试了标准的故障排除方法。但是我找不到我做错了什么......

static int partition(int[] A)
    {
        int pivot, i, j;
        i = 0;
        j = A.Length;
        pivot = A[i];

        do
        {
            do
            {
                i++;
            }
            while (A[i] < pivot || i < j);
            do
            {
                j--;
            }
            while (A[j] > pivot);

            swap(ref A[i], ref A[j]);
        }
        while (i < j);

        if (i <= j)
        {
            swap(ref A[i], ref A[j]);
            swap(ref A[0], ref A[j]);
        }

        return j;
    }

    static void swap(ref int a, ref int b)
    {
        int aCopy = a;
        a = b;
        b = aCopy;
    }

    static int[] QuickSort(int[] A)
    {
        int s;
        int left = 0;
        int right = A.Length;
        int[] B, C;

        if (A.Length == 0 || A.Length == 1)
            return A;
        else
        {
            s = partition(A);
            B = new int[s];
            C = new int[right - s];

            for (int i = left; i < s; i++)
            {
                B[i - left] = A[i];
            }
            for (int i = s; i < right; i++)
            {
                C[i - s] = A[i];
            }

            QuickSort(B);
            QuickSort(C);
            return A;
        }
    }

调试器不断给我一个带有 j 变量的“IndexOutOfRangeException”。我试过调整

while (A[i] < pivot || i < j);

部分。但这并没有做任何事情(好吧,它导致了一次 StackOverflowException)。

最佳答案

您有 j = A.Length,但它实际上应该是 j = A.Length - 1(基于您使用的循环)。

关于c# - C# 中的这个 QuickSort 算法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12785824/

相关文章:

c# - 包含路径表达式必须引用 type.in 预加载中定义的导航属性

c++ - 浮点平方根算法

javascript - 邮政编码生成器 JQuery

php - 如何让用户插入列表中的任意位置?

java - 使用quickSort时出现stackoverflowerror,我可以增加堆栈和堆吗?

c# - 在内存中创建并写入文本文件并一次性转换为字节数组

c# - 如果选择了无效值(即默认值),如何循环 case switch 语句

c# - 为什么当我使用字符串 "&&"时,它只在表单标签上显示 "&"?

algorithm - 为什么在快速排序中选择随机枢轴

c - C 中的快速排序未按预期工作