c++ - 排序算法的切换输入

标签 c++ algorithm sorting vector insertion

我在下面写了一个插入排序:

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/

相关文章:

java - 按列表值对 Java Map 进行排序

c - C 中的双向链表排序

c++ - 是否有解决方法可以在 C++ 中为 Shorts 定义用户定义的文字?

c++ - Rcpp 代码使 R 崩溃

algorithm - 字符串比较算法,相关性, "alike"2个字符串是多少

Javascript 性能 : multiple fooBaz VS multiple Foo. Bar.Baz

c++ - 具有 memory_order_relaxed 的存储是否有可能永远不会到达其他线程?

C++ 头文件、构造函数逻辑、简单的获取/设置方法

java - 如何改进此搜索算法运行时?

javascript - 如何获取 javascript 以在所有浏览器中使用链接对列表进行排序?