二元快速排序

我想从[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 (rbitsword) return ; while (j!=i) { while (digit(a[i],d)==0 && (ii)) 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>d)&1; } } 

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

随着TJMonk15校正( – 在此期间)。
我试图执行,这就是发生的事情

最后一个数组是489372,这个“日志”:

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

根据我没有交换是正确的..

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

不能

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

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