【问题标题】:Bottoms-up mergesort problems!自下而上的归并排序问题!
【发布时间】:2010-10-02 01:19:21
【问题描述】:

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

   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 无用的主题。无益的第二句话。看起来也像家庭作业。

标签: mergesort bottom-up


【解决方案1】:

明显的问题:

  • i 永远不会增加。
  • 在任何时候都不会比较数组中的两个元素。 (这就是if(a[i*j] &lt; min) 应该做的事情吗?我不知道。)
  • 为什么要将ij 相乘?
  • this.a.length 是什么?

风格问题:

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

挑剔:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2016-02-14
    • 2016-09-19
    • 2018-11-06
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多