Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 快速排序算法中的堆栈溢出异常_C#_Algorithm_Sorting_Exception_Stack - Fatal编程技术网

C# 快速排序算法中的堆栈溢出异常

C# 快速排序算法中的堆栈溢出异常,c#,algorithm,sorting,exception,stack,C#,Algorithm,Sorting,Exception,Stack,当我尝试对相对较大的列表进行排序时,我的快速排序算法遇到了问题,该列表没有重复项,并且几乎已排序(只有5个数字需要排序) 请在下面找到代码 public static void MyQuickSort(List<int> list, int left, int right) { if (list == null || list.Count <= 1) return; if (left < right)

当我尝试对相对较大的列表进行排序时,我的快速排序算法遇到了问题,该列表没有重复项,并且几乎已排序(只有5个数字需要排序)

请在下面找到代码

 public static void MyQuickSort(List<int> list, int left, int right)
    {
        if (list == null || list.Count <= 1)
            return;

        if (left < right)
        {
            int pivotIdx = MyPartition(list, left, right);
            //Console.WriteLine("MQS " + left + " " + right);
            //DumpList(list);
            MyQuickSort(list, left, pivotIdx - 1);
            MyQuickSort(list, pivotIdx, right);
        }
    }

static int MyPartition(List<int> list, int left, int right)
    {
        int start = left;
        int pivot = list[start];
        left++;
        right--;

        while (true)
        {
            while (left <= right && list[left] <= pivot)
                left++;

            while (left <= right && list[right] > pivot)
                right--;

            if (left > right)
            {
                list[start] = list[left - 1];
                list[left - 1] = pivot;

                return left;
            }


            int temp = list[left];
            list[left] = list[right];
            list[right] = temp;

        }
    }
publicstaticvoidmyquicksort(列表列表,左整数,右整数)
{

if(list==null | | list.Count递归算法在学术练习中很有趣,但在实践中很少使用,因为您看到:太多的递归调用导致调用堆栈使用过度,最终由于堆栈溢出而终止

简短回答:使用较小的数据集尝试您的代码


详细回答:重新编写代码以避免递归。您可以使用自己的堆栈而不是程序的调用堆栈。

您调试代码了吗?在哪一行出现此异常?是的,它是在对列表进行分区时发生的……此外,当输入包含重复数据的随机数的列表时,它可以完美地工作菲尔,数据的类型将决定进行了多少次递归调用。