Java 为什么';我的快速排序代码不起作用吗?
有人能帮我快速排序代码吗,因为当我给它提供数据时,它不会被执行。Java 为什么';我的快速排序代码不起作用吗?,java,quicksort,Java,Quicksort,有人能帮我快速排序代码吗,因为当我给它提供数据时,它不会被执行。 我没有得到任何答案。它就像是一个无限循环或者类似的东西 public class Provo { public static void swap(int[] a, int i, int j) { int temp=a[i]; a[i]=a[j]; a[j]=temp; } public static int HoarePartition(int m , int d, int[] a) { int piv
我没有得到任何答案。它就像是一个无限循环或者类似的东西
public class Provo {
public static void swap(int[] a, int i, int j)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
public static int HoarePartition(int m , int d, int[] a)
{ int pivot=a[m];
int i=m;
int j=d;
while(i<j)
{
while(a[i]<pivot)
{i=i+1;}
while(a[j]>pivot)
{j=j-1;}
if(i<j)
swap(a,i,j);
}
swap(a,m,j);
return j;
}
public static void quicksort(int m, int d, int[] a)
{
if (m<d)
{ int s=HoarePartition(m,d,a);
quicksort(m,s-1,a);
quicksort(s+1,d,a);
}
}
}
公共类Provo{
公共静态无效交换(int[]a,int i,int j)
{
int temp=a[i];
a[i]=a[j];
a[j]=温度;
}
公共静态int-hopartition(int m、int d、int[]a)
{int pivot=a[m];
int i=m;
int j=d;
而(i问题在于horeapartition()
函数
左索引,即i
应开始搜索轴本身前面的值(大于轴)
所以语句inti=m;
应该是inti=m+1;
编辑:
确保while(i此部分可能有问题:
if(i<j)
swap(a,i,j);
这基本上是在每次迭代后进行增量/减量,确保lo
和hi
更接近。每次程序进入quicksort
函数时,尝试打印m
和d
参数的值。查看是否有模式。如果i==m
和pivot==a[m]
a[i]
是真的吗?我现在就试试:)非常感谢!嘿…请再说一次…我必须订购大量数据,比如7500…但首先我尝试了如何使用少量数据,例如10…结果是我:0 1 2 3 4 5 6 7 9 8我唯一更改的是在i-s初始化开始时i=m+1+1用于指向此测试用例…通常你会找到快速排序(甚至在我读过的一些书中)不考虑这个条件并简单地提供OP版本的代码。
if(i<j)
swap(a,i++,j--);