自下而上的合并问题!

时间:2010-10-02 01:19:21

标签: mergesort bottom-up

我遇到了自下而上的合并问题。排序/合并时遇到问题。目前的代码包括:

   public void mergeSort(long[] a, int len) {
        long[] temp = new long[a.length];
        int length = 1;
        while (length < len) {
            mergepass(a, temp, length, len);
            length *= 2;
        }
    }


   public void mergepass(long[] a, long[] temp, int blocksize, int len) {
       int k = 0;
        int i = 1;
       while(i <= (len/blocksize)){
           if(blocksize == 1){break;}
           int min = a.length;
           for(int j = 0; j < blocksize; j++){
               if(a[i*j] < min){
                   temp[k++] = a[i*j];
                   count++;
               }
               else{
                   temp[k++] = a[(i*j)+1];
                   count++;
               }
           }
           for(int n = 0; n < this.a.length; n++){
               a[n] = temp[n];
           }
       }
    }

1 个答案:

答案 0 :(得分:2)

明显的问题:

  • i永远不会增加。
  • 您没有比较数组中的两个元素。 (那是if(a[i*j] < min)应该做的吗?我说不出来。)
  • 为什么要将ij相乘?
  • 什么是this.a.length

样式问题:

  • mergeSort()len作为参数,即使数组具有隐式长度。更糟糕的是,该功能还使用a.lengthlength
  • 通常差的变量名称。

挑剔:

  • 如果你要创建一个相同大小的第二个数组,通常会将其中一个作为“源”,将另一个作为“目标”,并在通道之间交换它们,而不是排序成临时数组并复制他们又回来了。