C++ 冒泡排序和比较

标签 c++ sorting bubble-sort

我已经编写了一些代码来尝试按年份、名称或投票对我的电影列表进行排序,但是当我运行该应用程序时它没有排序。只是想知道我哪里错了。我相信这可能与 Movie 电影有关。

更新:我已经稍微修复了它,现在它正在对列表中的前 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

关于C++ 冒泡排序和比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27328029/

相关文章:

c++ - 虚函数上下文中的支配是什么?

c++ - 向数组移动和添加元素

mongodb - 在 Mongodb/pymongo 中按字符串长度排序

c - 我尝试使用 gcc 编译并运行以下冒泡排序程序,但它显示错误

c++ - 安装应用程序EventHandler/NSNotificationCenter不通知事件(NSN)

c++ - 一种在SDL2、C++中旋转纹理的方法

c++ - 初始化 asio::ip::address_v6() 的最快方法?

algorithm - 计数排序如何稳定?

c++ - 复制数组和冒泡排序 C++

java - 如何修复这个冒泡排序程序?