链表上的快速排序算法c++实现

 
Category: DSA

写在前面

template <typename T>
list<T> sequential_quick_sort(list<T> input) {
    if (input.empty()) return input;
    list<T> ans{};
    ans.splice(ans.begin(), input, input.begin()); // 首元素放置给 ans
    T const& pivot = *ans.begin();

    // 分割点为插入 pivot 的位置
    auto divide_point = partition(input.begin(), input.end(),
                                  [&](T const& t) { return t < pivot; });

    list<T> lower_part;
    lower_part.splice(lower_part.end(), input, input.begin(), divide_point);

    auto new_lower(sequential_quick_sort(std::move(lower_part)));
    auto new_higher(sequential_quick_sort(std::move(input)));
    ans.splice(ans.end(), new_higher);
    ans.splice(ans.begin(), new_lower);
    return ans;
}

基本类