簡體   English   中英

如何使這種合並排序以降序而不是升序進行?

[英]How do I make this merge sort go in descending order rather than ascending?

這可能是一個相當簡單的問題。 我只是想不出如何按降序而不是升序進行排序。 誰能幫我嗎?

public static void sortYear(Movie4[] movies, int low, int high)
{
    if ( low == high ) 
        return; 
    int mid = ( low + high ) / 2; 
    sortYear( movies, low, mid ); 
    sortYear( movies, mid + 1, high ); 

    mergeYears(movies, low, mid, high ); 
}

public static void mergeYears(Movie4[] movies, int low, int mid, int high)
{

    Movie4[] temp = new Movie4[ high - low + 1 ]; 
    int i = low, j = mid + 1, n = 0; 
    while ( i <= mid || j <= high ) 
    { 
        if ( i > mid ) 
        { 
            temp[ n ] = movies[ j ]; 
            j++; 
        } 
        else if ( j > high ) 
        { 
            temp[ n ] = movies[ i ]; 
            i++; 
        } 
        else if ( movies[ i ].getYear() < movies[ j ].getYear()) 
        {   
            temp[n] = movies[i];
            i++;
        }
        else
        {
            temp[n] = movies[j];
            j++;
        }
        n++;
    }   
    for ( int k = low ; k <= high ; k++ ) 
    {
        movies[ k ] = temp[ k - low ]; 
    }
}

為了幫助您自己回答問題,我將在代碼中添加一些注釋。

所有的實際工作都在mergeYears中:

public static void mergeYears(Movie4[] movies, int low, int mid, int high)
{

    Movie4[] temp = new Movie4[ high - low + 1 ]; 

    // 'i' tracks the index for the head of low half of the range.
    // 'j' tracks the index for the head of upper half of the range.
    int i = low, j = mid + 1, n = 0; 

    // While we still have a entry in one of the halves.
    while ( i <= mid || j <= high ) 
    { 
        // Lower half is exhausted.  Just copy from the upper half.
        if ( i > mid ) 
        { 
            temp[ n ] = movies[ j ]; 
            j++; 
        } 
        // Upper half is exhausted. Just copy from the lower half.
        else if ( j > high ) 
        { 
            temp[ n ] = movies[ i ]; 
            i++; 
        } 
        // Compare the two Movie4 objects at the head of the lower and upper halves.
        // If lower is less than upper copy from lower.
        else if ( movies[ i ].getYear() < movies[ j ].getYear()) 
        {   
            temp[n] = movies[i];
            i++;
        }
        // Lower is is greater than upper.  Copy from upper.
        else
        {
            temp[n] = movies[j];
            j++;
        }
        n++;
    }

    // Copy from the temp buffer back into the 'movie' array.
    for ( int k = low ; k <= high ; k++ ) 
    {
        movies[ k ] = temp[ k - low ]; 
    }
}

要更改排序順序,您必須擔心它們比較對象值的確切位置。 就您而言,在下面的行中。

只需更改此:

else if ( movies[ i ].getYear() < movies[ j ].getYear()) 

對此:

else if ( movies[ i ].getYear() > movies[ j ].getYear()) 

注意,唯一改變的是>運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM