为什么这个插入排序不起作用?

问题描述 投票:-4回答:2

我创建了定义电影对象的电影类。这是一个测试类的客户端类。我创建了由它创建了今年的电影对象的数组排序的方法。当我测试的程序,我发现,一些电影的对象进行排序,有些则不会。有人能帮助我,为什么这不起作用?

public class MovieTesterv2 {
public static void main(String[] args) {
    Movie[] movies = {new Movie("Meet the Robinsons", 2007, "Disney"),
            new Movie("Avengers: Infinity War", 2018, "Pinewood"),
            new Movie("Iron Man", 2008, "Tim Miller"),
            new Movie("Aquaman", 2018, "Hollywood"),
            new Movie("Bumblebee", 2018, "Hollywood"),
            new Movie("Transformers", 2007, "Universal"),
            new Movie("The Lion King", 1994, "Disney"),
            new Movie("Mummy", 1999, "Universal"),
            new Movie("Minions", 2015, "Universal"),
            new Movie("Cinderella", 1950, "Disney")};
    insertionYear(movies);
}

public static void printMovies(Movie[] movies) {
    System.out.println("                 Movie     Year       Studio");
    System.out.println("--------------------------------------------");
    for (Movie movie: movies) {
        if (movie != null) {
            System.out.printf("%22s%9s%13s%n", movie.getTitle(),
                    movie.getYear(), movie.getStudio());
        }
    }
}

public static void insertionYear(Movie[] movies) {
    Movie[] sorted = new Movie[movies.length];

    for (int i = 0; i < movies.length; i++) {
        int k = i;
        while (k > 0) {
            if (movies[i].getYear() <= movies[k - 1].getYear()) {
                sorted[k] = sorted[k - 1];
                k--;
            } else {
                break;
            }
        }
        sorted[k] = movies[i];
        printMovies(sorted);
        System.out.println();
    }

    for (int i = 0; i < movies.length; i++) {
        movies[i] = sorted[i];
    }
}

}

这是电影类。

public class Movie
{
    private int year;
    private String title;
    private String studio;

    public Movie(String title, int year, String studio)
    {
        this.title = title;
        this.year = year;
        this.studio = studio;
    }

public String getTitle()
{
    return title;
}

public void setTitle(String title)
{
    this.title = title;
}

public String getStudio()
{
    return studio;
}

public void setStudio(String studio)
{
    this.studio = studio;
}

public int getYear()
{
    return year;
}

public void setYear(int year)
{
    this.year = year;
}

public String toString()
{
    String str = String.format("%-30s %4d   %-20s", title, year, studio);
    return str;
}

}

java
2个回答
0
投票

你不是每个元素比较排序列表像插入排序一般不会。在这一行,

if (movies[i].getYear() <= movies[k - 1].getYear())

你比较你迭代到原始列表之前来的电影目前的电影。这应改为

if (movies[i].getYear() <= sorted[k - 1].getYear())

原因是,现在你在索引i在指数比较当前电影电影不到我数组排序英寸通过这种方式,你可以找到当前影片的排序电影至今正确的位置。


1
投票

看这这行:

if (movies[i].getYear() <= movies[k - 1].getYear()) {

要比较的电影对排序列表,而不是自己的电影名单。

© www.soinside.com 2019 - 2024. All rights reserved.