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
您可能正在访问此处的越界索引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
列表中的相邻项目。像这样:
if (movies[i].CompareTo(movies[i + 1], n) == -1)
相关文章:
- shell排序中的交换和比较
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- C++ 如何比较n个排序的整数向量以找到互元素?
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 不正确的比较和交换计数器输出用于快速排序功能
- 对没有比较器或λ函数的向量进行排序?
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- C++设置了一个用于排序的比较器和另一个用于唯一性的比较器
- C++对λ比较器EXC_BAD_ACCESS进行排序
- 如果要求比较器是严格的总排序,而不仅仅是严格的弱排序,C++标准算法会更快吗?
- 使用三个数字比较器进行排序
- 根据比较函数C++对数组进行排序
- 使用自定义比较函数在类内进行列表排序
- std::为插入和排序设置不同的比较器
- 在C++排序中为比较函数指定参数
- 尝试使用比较运算符对对象向量进行排序
- 解释标准库排序函数C++的比较谓词的工作原理?
- 排序函数和优先级队列 C++ 中的比较器
- 更快的字符串比较排序,用于唯一()
- 如何比较/排序包含自定义 typedef 的列表容器的元素