繁体   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