二元快速排序

时间:2010-05-26 14:38:29

标签: java algorithm

我想从[Robert Sedgewick的书] [1]中实现Binary Quicksort算法。它看起来像这样:

    public class quickb{
public static final int bitsword=32;

public static void quicksortB(int a[],int l,int r,int d){
 int i=l;
int j=r;
if (r<=l || d>bitsword) return ;

 while (j!=i)
{

  while (digit(a[i],d)==0 && (i<j)) i++;
while (digit(a[j],d)==1 && (j>i)) j--;
   int t=a[i];
a[i]=a[j];
a[j]=t;
}
      if (digit(a[r],d)== 0) j--;

  quicksortB(a,l,j-1,d+1);
 quicksortB(a,j,r,d+1);




}

public static void main(String[]args){
   int a[]=new int[]{4,7,3,9,8,2};


 quicksortB(a,0,a.length-1,0);

 for (int i=0;i<a.length;i++){
  System.out.println(a[i]);
}



}

 public static int digit(int m,int d){


    return (m>>d)&1;



}
}

我已经改变它编译,但结果是 4 8 9 3 7 2  也许书中的代码是正确的,任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

不应该

while (digit(a[j],d)==1 && (j>i)) j++;

while (digit(a[j],d)==1 && (j>i)) j--;

答案 1 :(得分:0)

用TJMonk15校正( - 同时) 我试图执行,这就是发生的事情

最后一个数组是489372,带有“log”:

交换(从左到右):7与8
交换(从左到右):3与3
交换(从左到右):3与9
交换(从左到右):3与3
交换(从左到右):7与7

根据我的说法,没有交换是正确的。

我不明白为什么int j=r-1并且您使用length-1作为r,那么j在开头就等于length-2