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--);