解决方案 »

  1.   

     for(int n=1;(n<<=1)<count;odd^=1);
    就是
    int n = 1;
    do {
        n *= 2;
        if (odd == 0) odd = 1 else odd = 0;
    } while (n < count);
    也就是判断n中(二进制形式)有偶数个1还是奇数个1。
      

  2.   

    你要注意for后面有个;
    所以它本身是一个循环。你的格式有迷惑性。下面的if不属于这个循环。
      

  3.   

    我知道代码的意思
    我是在想 这是为 什么时候的情况
                 当odd为偶数时 数组被复制 为奇数时就不复制
                 就好像是复制与不复制都是一样的 因为后面要被覆盖
                 但作者不应该是 仅仅为了 时而为偶数 则复制 
                 odd因count的值而变
                 这么做更效率还是什么
                 这个代码是java.util.DualPivotQuicksort中的片段
                所以不理解 他应该是为 某种情况而存在 或是心情好?
      

  4.   

    我知道代码的意思
    我是在想 这是为 什么时候的情况
                 当odd为偶数时 数组被复制 为奇数时就不复制
                 就好像是复制与不复制都是一样的 因为后面要被覆盖
                 但作者不应该是 仅仅为了 时而为偶数 则复制 
                 odd因count的值而变
                 这么做更效率还是什么
                 这个代码是java.util.DualPivotQuicksort中的片段
                所以不理解 他应该是为 某种情况而存在 或是心情好?
                还是我理解错误了。。
      

  5.   

    自己闲来无事也写了一个快排,给楼主参考一下吧
    public class QuictSortTest {
     public static void main(String...args){
      int[] arr=new int[]{23,4,5,6,23,45};
      quickSort(arr,0,arr.length-1);
      for(int i=0;i<arr.length;i++)
       System.out.print(arr[i]+"\t");
     }
     
     public static void quickSort(int[] a,int low,int high){
      if(low>=high)
       return;
      if(low<=high){
       int middle=partition(a,low,high);
       quickSort(a,low,middle-1);
       quickSort(a,middle+1,high);
      }
     } private static int partition(int[] a, int low, int high) {
      if(low>=high)
       return 0;
      int p=a[low];
      int i=low,j=high;
      while(i<j){
       while(i<=j&&i<a.length&&a[i]<=p){
        if(i<high)
         i++;
        else
         break;
       }
       while(i<=j&&a[j]>=p)
        j--;
       swap(a,i,j);
       if(i==j)
        break; //当情况是9,8,6,5这种的时候
      }
      swap(a,i,j);
      swap(a,low,j);
     
      return j;
     } 
     private static void swap(int[] a,int i, int j) {
      int tmp=a[i];
      a[i]=a[j];
      a[j]=tmp;
     }
      
    }
      

  6.   

    恩 不错 就是 有些表达式是不是有点多余
     但也许你是指某些时候的情况需要
    快速排序种类很多啊 。。
    能不能加个好友QQ以后一起编程啊
    我的qq号是353003874