Восходящие проблемы слияния! - PullRequest
1 голос
/ 02 октября 2010

У меня проблемы со слиянием снизу вверх. У меня проблемы с сортировкой / слиянием. Текущий код включает в себя:

   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 Ответ

2 голосов
/ 02 октября 2010

Очевидные проблемы:

  • i никогда не увеличивается.
  • Ни в коем случае нельзя сравнивать два элемента в массиве.(Это то, что if(a[i*j] < min) должен делать? Я не могу сказать.)
  • Почему вы умножаете i и j?
  • Что такое this.a.length?

Проблемы со стилем:

  • mergeSort() принимает len в качестве аргумента, даже если массивы имеют неявную длину.Что еще хуже, функция также использует a.length и length.
  • Как правило, плохие имена переменных.

Nitpicks:

  • Если выСобираясь сделать второй массив того же размера, обычно один источник становится источником, а другой - местом назначения и обменивается ими между проходами вместо сортировки во временный массив и повторного копирования.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...