C# 快速排序算法中的堆栈溢出异常
当我尝试对相对较大的列表进行排序时,我的快速排序算法遇到了问题,该列表没有重复项,并且几乎已排序(只有5个数字需要排序) 请在下面找到代码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)
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递归算法在学术练习中很有趣,但在实践中很少使用,因为您看到:太多的递归调用导致调用堆栈使用过度,最终由于堆栈溢出而终止
简短回答:使用较小的数据集尝试您的代码
详细回答:重新编写代码以避免递归。您可以使用自己的堆栈而不是程序的调用堆栈。您调试代码了吗?在哪一行出现此异常?是的,它是在对列表进行分区时发生的……此外,当输入包含重复数据的随机数的列表时,它可以完美地工作菲尔,数据的类型将决定进行了多少次递归调用。