【发布时间】:2015-07-12 05:06:36
【问题描述】:
我在尝试对没有重复项且几乎已排序(只有 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;
}
}
【问题讨论】:
-
你调试你的代码看看会发生什么?你在哪一行得到这个异常?
-
是的,在对列表进行分区时会发生这种情况...此外,当输入包含重复项且没有按顺序排列的随机数的列表时,它可以正常工作。
-
Phil,数据的类型将决定递归调用的次数。
标签: c# algorithm sorting exception stack