gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:32:48 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com