[英]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.