Java 插入排序不起作用

Java 插入排序不起作用,java,sorting,Java,Sorting,sortYears()方法应该按发行年份降序排列电影。它可以很好地编译,但不会更改排序数组中电影的顺序。最简单的修复方法是什么?谢谢 Movie2class: public class Movie2 implements Comparable<Movie2> { // instance variables private String title; private int year; private String studio; public Movie2(St

sortYears()
方法应该按发行年份降序排列电影。它可以很好地编译,但不会更改排序数组中电影的顺序。最简单的修复方法是什么?谢谢

Movie2
class:

public class Movie2 implements Comparable<Movie2>
{
 // instance variables 
  private String title;
  private int year;
  private String studio;

  public Movie2(String title, int year, String studio)
 {
  // initialise instance variables
   this.title = title;
   this.year = year;
   this.studio = studio;
  }
public String toString()
{
    String listing;
    listing = title + ", " + year + ", " + studio;

    return listing;
}

public void setTitle(String title)
{
    this.title = title;
}
public String getTitle()
{
    return title;
}
public void setYear(int year)
{
    this.year = year;
}
public int getYear()
{
    return year;
} 
public void setStudio(String studio)
{
    this.studio = studio;
}  
public String getStudio()
{
    return studio;
}
public int compareTo(Movie2 obj)
{ 
  if (title.equals(obj.title))
    return -1;
  else if (title == obj.title) 
    return 0;
  else 
    return 1; 
}
 public class TestMovie2
 {
   public static void main(String[] args)
  {
     Movie2[] myMovies = new Movie2[10];
     Movie2[] sorted = new Movie2[10];

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

System.out.println("   Movies (before change) ");
System.out.println("______________________________");
System.out.println();
printMovies(myMovies);
System.out.println();
System.out.println();

for (int i = 0; i < myMovies.length; i++)
{
  int next = myMovies[i].getYear();
  int insertIndex = 0;
  int k = i;
  while (k>0 && insertIndex == 0)
  {
   if (next > sorted[k-1].getYear())
   {
     insertIndex = k;
   }
   else 
   {
    sorted[k] = sorted[k-1]; 
   }
   k--;
  }
  sorted[insertIndex].setYear(next);
}

sortYears(myMovies, sorted);
System.out.println(" Sorted by year - descending");
System.out.println("______________________________");
System.out.println();
printMovies(sorted);
System.out.println();
System.out.println();

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

 public static void sortYears(Movie2[] myMovies, Movie2[] sorted)
   {

   for ( int i = 0 ; i < myMovies.length ; i++ )
   {
       Movie2 next = myMovies[ i ];
       int insertindex = 0;
       int k = i;
       while ( k > 0 && insertindex == 0 )
       {
          if ( next.getYear() > sorted[k-1].getYear() )
          {
              insertindex = k;
          }
          else
          {
             sorted[ k ] = sorted[ k - 1 ];
          }
           k--;
       }

       sorted[ insertindex ] = next;
   }     

您正在错误地进行插入排序。考虑从最高到最低排序所需的逻辑。
这是一种使用数组的插入排序,但它可以工作,并且可以根据您的代码进行推断

    public static void main(String[] args) {
    int [] ar1 = {1, 5, 4, 9, 3, 2, 7, 8, 6, 0};
    int temp = 0;    

     System.out.println ("Unsorted: ");
     for (int i = 0; i < ar1.length; i++)
     System.out.print (ar1[i] + "  ");


     for (int i = 1; i < ar1.length; i++) {
         temp = ar1[i];

         // temp < ar1[j]  = Sort in ascending order
         for (int j = i - 1; j >= 0 && temp > ar1[j]; j--) {
             ar1[j + 1] = ar1[j];
         }
         ar1[j + 1] = temp;
     }


     System.out.println ("\nSorted: ");
     for (int i = 0; i < ar1.length; i++)
     System.out.print (ar1[i] + "  ");
}
publicstaticvoidmain(字符串[]args){
int[]ar1={1,5,4,9,3,2,7,8,6,0};
内部温度=0;
System.out.println(“未排序:”);
for(int i=0;i=0&&temp>ar1[j];j--){
ar1[j+1]=ar1[j];
}
ar1[j+1]=温度;
}
System.out.println(“\n被选中:”);
for(int i=0;i

}

请发布可编译代码。