gpt4 book ai didi

c - 无法调试我的快速排序程序

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:42 25 4
gpt4 key购买 nike

<分区>

#include <stdio.h>


int Partition (int * A, int p, int r)
{
printf("PARTITION\n");
int x=0;
x=A[r];
int i=p-1, j=r+1;
int temp;
int k=0;
while(1)
{
printf("\tLOOP\n");
do
{
j=j-1;
} while(A[j]>x) ;

do
{
i=i+1;
} while(A[i]<x);

if (i<j)
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
else
{
printf ("ARRAY: ");
for (k=p; k<=r; k++)
printf ("%d,",A[k]);
printf ("\nRETURNING : %d \n", j);

return j;
}

}
}
void QuickSort(int * A, int p, int r)
{
int q;
if (p<r)
{
q = Partition (A,p,r);
QuickSort(A,p,q);
QuickSort(A,q+1,r);
}

}



int main()
{
int A[9] = {9,2,4,1,7,8,3,5,6};
int i;
QuickSort(A,0,8);
for (i=0;i<=8;i++)
{
printf("%d ", A[i]);
}
return 0;
}

在 GDB 上学习了一个小时后,我将这个程序的问题缩小到了:

我的数组有 0-9 的索引。它首先被划分为 0-5 和 6-9。然后 0-5 部分被划分为 0-2 和 3-5然后 0-2 部分被划分为 0-0 和 1-2现在由于 if (p<r) 而跳过 0-0 部分条件,但程序为另一部分调用 Partition (A,1,2)。现在这里是程序卡住的地方,它不断地一次又一次地调用 Partition (A,1,2),因为它不断返回“2”作为枢轴索引。

为什么会这样?我无法从逻辑上理解我在程序中哪里出了问题,我遵循了互联网上各个地方给出的确切伪代码。

编辑:我能够使用 if (i<=j) 解决问题而不是 if (i<j)Partition .它强制j再次递减,但这只是因为我有幸选择了do while而不是 while .我仍然不明白为什么直接实现 Quicksort 伪代码不起作用。

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