1

我在使用自下而上的归并排序时遇到问题。我在排序/合并时遇到问题。当前代码包括:

   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];
           }
       }
    }
4

1 回答 1

2

明显的问题:

  • i永远不会增加。
  • 您绝不会比较数组中的两个元素。(这if(a[i*j] < min)是应该做的吗?我不知道。)
  • 你为什么要乘ij
  • 是什么this.a.length

风格问题:

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

挑剔:

  • 如果您要创建第二个相同大小的数组,通常将一个作为“源”,另一个作为“目标”并在传递之间交换它们,而不是排序到一个临时数组中并再次将它们复制回来.
于 2010-10-02T02:18:01.453 回答