我在下面写了一个插入排序:
int i, j;
Book temp;
for (j = 1; j < books.size(); j++) {
temp = books[j];
i = j - 1;
while (i >= 0) {
if (temp.getAuthor().compare(books[i].getAuthor()) > 0) {
break;
}
books[i +1] = books[i];
i--;
}
books[i + 1] = temp;
}
我希望能够以某种方式更改它,以便我可以使用不同的因素运行它。
temp.getAuthor
也有 .getTitle
和 .getYear
无论如何都可以修改这段代码,所以我也可以运行它们,具体取决于用户选择。我正在查看模板,但不确定我是否在正确的区域?
最佳答案
首先,不要使用如此缓慢的排序算法实现(O(N^2)
是一个非常慢的算法)。我建议做这样的事情:
1) 扩展Book
按比较运算符分类:
bool operator<(const Book& rhs)
{
return getAuthor().compare(rhs.getAuthor()) < 0;
}
2) 调用标准排序函数:
std::sort(books.begin(), books.end());
在它之后你可以扩展operator<
考虑到 Book
的其他属性(不要忘记 std::sort
需要严格的弱排序比较)。
另一种方式(如果无法修改类 Book
):
1) 创建函数
bool Greater(const Book& left, const Book& right)
{
return left.getAuthor().compare(right.getAuthor()) > 0;
}
2) 并这样调用它:
std::sort(books.begin(), books.end(), Greater);
在这种情况下,您将扩展函数 Greater
支持 Book
的其他属性.
关于c++ - 排序算法的切换输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43681384/