public void sort(int[] num,int left,int right)
       {
           int i = left;
           int j = right;
           int mid = num[(left + right) / 2];
           do
           {
               while ((i < right) & (num[i] < mid)) { i++; }
               while ((j > left) & (num[j] > mid)) { j--; }
               if (i <= j)
               {
                   int x = num[j];
                   num[i] = num[j];
                   num[j] = x;
                   i++; j--;
               }
           }
           while (i <= j);
           if(left<j)sort(num, left, j);
           if(i<right)sort(num, i, right);
       }       int[] num = { 5,89,68,23,65,28,19};//被排序的数组
       sort(num, 0, 6);//调用函数结果是5  19  23  19  19  28  19

解决方案 »

  1.   

    不习惯do while
    把思路搞清楚很好排序的
      

  2.   

    ....
    int   x   =   num[j]; 
    num[i]   =   num[j]; 
    num[j]   =   x; 
    i++;   j--; 这里面错了吧?
    应该是

    int   x   =   num[i]; 

    试试
      

  3.   


     public void sort(int[] num, int left, int right)
            {
                int i = left;
                int j = right;
                int mid = num[(left + right) / 2];
                do
                {
                    while ((i < right) & (num[i] < mid)) { i++; }
                    while ((j > left) & (num[j] > mid)) { j--; }
                    if (i <= j)
                    {
                        int x = num[j];
                        num[j] = num[i];
                        num[i] = x;
                        i++; j--;
                    }
                }
                while (i <= j);
                if (left < j) sort(num, left, j);
                if (i < right) sort(num, i, right);
            }