解决方案 »

  1.   

    不知道所说的bug是指什么,我测试了几次,结果好像都没问题。
      

  2.   

    for (int i = 0; i < rows; i++) {
                            // rows 改为100有bug ???
    arr[i] = random.nextInt(rows);
    }把rows 改成 100
    然后 会使得arr[i]  只能得到100个随机数, 而 arr[101]……后面的都没有数。
    从而影响 xunHuanTi 这个 方法里面的比较
      

  3.   

    for (int i = 0; i < rows; i++) {
                            // rows 改为100有bug ???
    arr[i] = random.nextInt(100);
    }
    大哥我说的是只改这一个rows,
      

  4.   

    是不是只要把rows改成具体的数值,就会有下面的错误:
    java.lang.StackOverflowError
      

  5.   

    可能是当rows改成100后,产生的随机数都是在100以内,每次快排需要变化位置的次数很多,所以当执行递归的时候:
    arr[j] = arr[i];
    arr[i] = arr[++j];
    需要更多次的赋值,开辟了过多的空间,造成java堆栈溢出。
    (统计结果:递归执行8次后,产生的替换次数就不再增加了一直保持1407353,平均替换次数也在175919。)
    但是当用rows的时候,产生的随机数,基本是分布平均的。
    (统计结果:产生替换11941900次,递归共执行878584次,平均每次递归产生13次替换)
    统计方法:
    类里声明2个变量分别用来统计产生替换的总数和递归执行总数
    不知道是否有所帮助,具体原因估计和递归时,执行下列代码的时候,java内存分配有关:
    arr[j] = arr[i];
    arr[i] = arr[++j];