本帖最后由 juxl2011 于 2013-05-20 20:49:07 编辑

解决方案 »

  1.   

    LZ是要做快排么?这边有个类似的,LZ可以参考下,感觉左右值交换那块有点差异。public class QuickSort
    {    public static int N = 10;    public static void main(String[] args)
        {
            int[] a = new int[N];
            System.out.println("随机生产的数组a[N]为:");
            for (int i = 0; i < N; i++)
            {
                Random r = new Random();
                a[i] = Math.abs(r.nextInt()) % 100;
                System.out.println("a[" + i + "]= " + a[i]);
            }        //快速排序,升序排列a[N]数组
            quickSort(a, 0, N - 1);
            
            //排序后的数组显示:
            System.out.println("排序后的数组为:");
            for (int i = 0; i < N; i++)
            {
                System.out.println("a[" + i + "]= " + a[i]);
            }
        }    private static void quickSort(int[] a, int l, int r)
        {
            //中值
            int m = (l + r) / 2;
            if (m >= N - 1 || l >= r)
            {
                return;
            }        //左下标
            int i = l;
            //右下标
            int j = r;        while (i < j)
            {
                //寻找左侧大于中值的下标
                while (i < m && a[i] < a[m])
                {
                    i++;
                }
                //寻找右侧小于中值的下标
                while (j > m && a[j] > a[m])
                {
                    j--;
                }
                
                //交换左右值
                if(i <= j)
                {
                    int temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                    i++;
                    j--;
                }
            }
            //此时,以i、j为分隔,将数组分为3块:左、中、右。并且左块所有数值都比中、右块小,右块所有值都比左、中块大。
            
            //左块调用快速排序
            if(j > l)
            {
                quickSort(a,l,j);
            }
            //右块调用快速排序
            if(i < r)
            {
                quickSort(a,i,r);
            }
        }
    }
      

  2.   

    你的流程是:
    endary = 19,计算得MID=2,调用quickRUN(arg, startflag, MID-1=1);
    endary = 1,计算得MID=0,调用quickRUN(arg, startflag, MID-1=-1);
    endary = -1;问题是你的quickRUN方法没有结束条件,
    不管你求MID的方法是否正确