簡體   English   中英

Java插入排序不排序

[英]Java Insertion Sort not sorting

public static void main(String[] args)
{
    Movies2[] movies = new Movies2[10];

    movies[0] = new Movies2("The Muppets Take Manhattan", 2001, "Columbia Tristar");
    movies[1] = new Movies2("Mulan Special Edition", 2004, "Disney");
    movies[2] = new Movies2("Shrek 2", 2004, "Dreamworks");
    movies[3] = new Movies2("The Incredibles", 2004, "Pixar");
    movies[4] = new Movies2("Nanny McPhee", 2006, "Universal");
    movies[5] = new Movies2("The Curse of the Were-Rabbit", 2006, "Aardman");
    movies[6] = new Movies2("Ice Age", 2002, "20th Century Fox");
    movies[7] = new Movies2("Lilo & Stitch", 2002, "Disney");
    movies[8] = new Movies2("Robots", 2005, "20th Century Fox");
    movies[9] = new Movies2("Monsters Inc.", 2001, "Pixar");

    printMovies(movies);
    sortTitle(movies, 1);
    printMovies(movies);
    //sortYear(movies, 2);
    //printMovies(movies);
    //sortStudio(movies, 1);
    //printMovies(movies);
}

public static void printMovies(Movies2[] list)
{
    for(int i = 0; i < list.length; i++)
        System.out.println(list[i]);
}

public static Movies2[] sortTitle(Movies2[] source, int direction)
{
   Movies2[] dest = new Movies2[ source.length ];
   if(direction == 1)
   {
   System.out.println("Sort by Title - ascending");
    for ( int i = 0 ; i < source.length ; i++ )
    {
       Movies2 next = source[i];
       int insertindex = 0;
       int k = i;
       while ( k > 0 && insertindex == 0 )
       {
          if ( next.getTitle().compareTo(dest[k-1].getTitle()) > 0 )
          {
              insertindex = k;
          }
          else
          {
             dest[ k ] = dest[ k - 1 ];
          }
           k--;
       }
       dest[ insertindex ] = next;
    } 
}
else if( direction == 2)
{
    System.out.println("Sort by Title - descending");
    for ( int i = 0 ; i < source.length ; i++ )
    {
       Movies2 next = source[ i ];
       int insertindex = 0;
       int k = i;
       while ( k > 0 && insertindex == 0 )
       {
          if ( next.getTitle().compareTo(dest[k-1].getTitle()) < 0 )
          {
              insertindex = k;
          }
          else
          {
             dest[ k ] = dest[ k + 1 ];
          }
           k--;
       }
       dest[ insertindex ] = next;
    } 

}
else 
{
    dest = source;
}
   return dest;

我的電影陣列中有這段代碼。 在movies類中,所有參數都有getter方法。 當我嘗試使用數字2(降序選擇)運行此代碼時,它給我一個空錯誤。 當我嘗試使用1進行升序時,它不會對其進行排序。

問題在這里

if (next.getTitle().compareTo(dest[k - 1].getTitle()) > 0) {

可能是next.getTitle()null 標題設置不正確。


嘗試使用以下簡單方法對數組進行排序:

public static void sort(Movies2[] numbers, boolean ascending) {

    Movies2 tempVar = null;

    for (int i = 0; i < numbers.length; i++) {
        for (int j = 1; j < numbers.length - i; j++) {
            int diff = numbers[j - 1].getTitle().compareTo(numbers[j].getTitle());
            if ((ascending && diff > 0) || (!ascending && diff < 0)) {
                tempVar = numbers[j - 1];
                numbers[j - 1] = numbers[j];
                numbers[j] = tempVar;
            }
        }
    }
}

暫無
暫無

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

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