自下而上的合并问题!

我有自下而上的合并问题。排序/合并时遇到问题。目前的代码包括:
   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];
           }
       }
    }
    
已邀请:
明显的问题:
i
永远不会增加。 在任何时候你都不比较数组中的两个元素。 (这是
if(a[i*j] < min)
应该做的吗?我说不出来。) 你为什么乘以
i
j
? 什么是
this.a.length
? 风格问题:
mergeSort()
len
作为参数,即使数组具有隐式长度。更糟糕的是,该功能还使用
a.length
length
。 通常差的变量名称。 吹毛求疵: 如果你要制作一个相同大小的第二个数组,通常会将其中一个作为“源”而另一个作为“目标”并在通道之间交换它们,而不是排序到临时数组并再次复制它们。     

要回复问题请先登录注册