簡體   English   中英

C ++冒泡排序和比較

[英]C++ Bubble Sorting and Comparing

我已經做了一些代碼來嘗試按年份,名字或者投票來排序我的電影列表但是當我運行應用程序時它沒有排序。 只是想知道我哪里出錯了。 我相信它可能與電影電影有關。

更新:我已經修改了一些,現在它正在對列表中的前10個或20個項目進行排序,但不會對其余項目進行排序。 我已經與cout檢查過我的循環是否有任何問題,似乎從0-248好了。

enum MovieSortOrder
{
    BY_YEAR = 0,
    BY_NAME = 1,
    BY_VOTES = 2
};

int Movie::CompareByVotes(Movie m) {
    if (m.get_votes() == this->get_votes()) {
        return 0;
    } else if (m.get_votes() > this->get_votes()) {
        return 1;
    } else {
        return -1;
    }
}

int Movie::CompareByYear(Movie m) {
    if (m.get_year() == this->get_year()) {
        return 0;
    } else if (m.get_year() > this->get_year()) {
        return 1;
    } else {
        return -1;
    }
}

int Movie::CompareByName(Movie m) {
    string a = m.get_name();
    string b = this->get_name();
    if (a[0] = b[0]) {
        return 0;
    } else if (a[0] > b[0]) {
        return 1;
    } else if (a[0] < b[0]) {
        return -1;
    }
}

int Movie::CompareTo(Movie m, MovieSortOrder n) {
    if (n == 0) {
        return CompareByYear(m);
    } else if (n == 1) {
        return CompareByName(m);
    } else if (n == 2) {
        return CompareByVotes(m);
    }
}



bool MovieList::MoveLargestToEnd(MovieSortOrder n) {
    bool changed = false;
    for (int i = 0; i < last_movie_index; i++) {
        //cout << i << endl;
        if (movies->CompareTo(movies[i], n) > movies->CompareTo(movies[i + 1], n)) {
            swap(movies[i], movies[i + 1]);
            changed = true;
        }
    }
    return changed;
}

void MovieList::BubbleSort(MovieSortOrder n) {
    for (int i = 0; i < last_movie_index; i++) {
        if (!MoveLargestToEnd(n)) {
            return;
        }
    }
}

這行是個問題:

 if (a[0] = b[0])

它做分配,而不是比較。 它的真/假來自b[0]的值。

這是Movie::CompareByName(Movie m)的第一個if Movie::CompareByName(Movie m)

你可能訪問外的結合指數i在這里:

for (int i = 0; i < last_movie_index; i++)
{
    if (movie.CompareTo(movies[i], n) > movie.CompareTo(movies[i + 1], n))
    {
        swap(movies[i], movies[i + 1]);
        changed = true;
    }
}

此外, MovieList::BubbleSort可以簡化為:

void MovieList::BubbleSort(MovieSortOrder n)
{
    while (MoveLargestToEnd(n));
}

代碼中存在更多問題:

    if (movie.CompareTo(movies[i], n) > movie.CompareTo(movies[i + 1], n))

鑒於您如何實現這些比較功能,您的上述用法是不正確的。 你正在制作一部空的Movie movie; 變量,你正在將與你的movies[i]進行比較movies[i] 這是你的排序不起作用的一個重要原因。 你真正想要的是比較movies列表中的相鄰項目。 就像是:

    if (movies[i].CompareTo(movies[i + 1], n) == -1)

暫無
暫無

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

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