compareTo () String / Merge sort

1

У меня возникла проблема с печатью нисходящего порядка моего массива. Порядок массива выглядит как (Title, Studio, Year). У меня правильный порядок, но я не могу напечатать восходящий порядок, он может печатать только нисходящий порядок. пример

Movie2 a = new Movie2("The Muppets Take Manhattan","Columbia Tristar", 2001); Movie2 b = new Movie2("Mulan Special Edition","Disney", 2004); Movie2 c = new Movie2("Shrek2", "Dreamworks",2004);

  public static void sortTitles(Movie2[] a, int low, int high)
    {
        if ( low == high )
            return;

        int mid = ( low + high ) / 2;

        mergeTitle( a, low, mid, high);
    }  

    public static void mergeTitle( Movie2[] a, int low, int mid, int high )
    {
        Movie2[] temp = new Movie2[ high - low + 1 ];

        int i = low, j = mid + 1, n = 0;


        while ( i <= mid || j <= high )
        {

            int result= a[ i ].getTitle().compareTo(a[ j ].getTitle());
            int result2= a[ j ].getTitle().compareTo(a[ i ].getTitle());
            if ( i > mid )
            {
                temp[ n ] = a[ j ];
                j++;
            }
            else if ( j > high )
            {
                temp[ n ] = a[ i ];
                i++;
            }
            else if ( result < result2 )
            {
                temp[ n ] = a[ i ];
                i++;
            }

            else
            {
                temp[ n ] = a[ j ];
                j++;
            }
            n++;
        }

        for ( int k = low ; k <= high ; k++ )
            a[ k ] = temp[ k - low ];

    } // end of merge    
Теги:
arrays
sorting

1 ответ

1
Лучший ответ

Когда вы хотите по убыванию, как вы уже это делали:

int result= a[ i ].getTitle().compareTo(a[ j ].getTitle());
int result2= a[ j ].getTitle().compareTo(a[ i ].getTitle());

Восхождение противоположно нисходящему, поэтому просто отрицайте сравнения:

int result= a[ i ].getTitle().compareTo(a[ j ].getTitle()) * -1;
int result2= a[ j ].getTitle().compareTo(a[ i ].getTitle()) * -1;

Чтобы это сделать, вы можете перейти в логическое:

int result= a[ i ].getTitle().compareTo(a[ j ].getTitle()) *
   (isAscending ? -1 : 1);
int result2= a[ j ].getTitle().compareTo(a[ i ].getTitle()) *
   (isAscending ? -1 : 1);

(Вы говорите, что ваша сортировка работает хорошо, и этот ответ предполагает, что это правда. Я не проверял это.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню