gpt4 book ai didi

java - 代码有什么区别?

转载 作者:行者123 更新时间:2023-12-02 11:23:54 29 4
gpt4 key购买 nike

我写了一个快速排序的java代码,经过多次调试后,我决定编写一个全新的快速排序代码,然后成功实现。但是当我将我的新代码与以前的代码进行比较时,我不能找出它不编译的任何原因。我知道您可以使用 Arrays.sort(a); 直接对数组进行排序这是两个代码

public static int partion(int[] a,int start,int end)
{
//Previous Code(buggy)
/*int pivot =a[end];
int pindex=start;
for(int i=0;i<end;i++)
{
if(pivot>=a[i])
{
int s=a[i];
a[i]=a[pindex];
a[pindex]=s;
pindex++;
}
}
int j=pivot;
pivot=a[pindex];
a[pindex]=j;
return pindex;*/

//corrected one
int pindex,pivot,swap,i;
pivot=a[end];
pindex=start;
for(i=start;i<end;i++)
{
if(a[i]<=pivot)
{
swap=a[i];
a[i]=a[pindex];
a[pindex]=swap;
pindex++;
}
}
swap=a[pindex];
a[pindex]=a[end];
a[end]=swap;
return pindex;
}

请帮忙,因为我是 Java 新手。编辑错误是线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:5

最佳答案

第一个区别是 >=因为它在你的错误代码中并不与<=相反。 。您会得到java.lang.ArrayIndexOutOfBoundsException因为你的支票>=当最小的元素成为枢轴时启用它。相反的情况允许程序精确地到达索引的末尾,而有缺陷的版本将允许它再移动一次。

您的第二个问题是在有缺陷的代码中的 for 循环之后。如果您只修复上面的错误,您的结果将是 11111。这是因为以下行:

pivot=a[pindex];

在这里,您更新本地 int 值,而不是数组中的值,因此您可以正确地将一个值交换到另一个值,但反之亦然,您只是更新本地变量,而不是像正确的那样更新数组中的引用代码:

a[end]=swap;

解决这个问题的方法是:

a[end]=a[pindex];

关于java - 代码有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49730901/

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