快速排序C++实现

自己用来复习使用的:

  • 快速排序的大概的意思就是选出一个值
  • 将后面的值分成两个集合分别是大于选出的值,和小于选出的值的两个集合
  • 然后在将上面分出来的两个集合重复上面的步骤。
  • 最后合并两个集合,中间的连接用选出值连接
  • quick_sort.hpp
#pragma once
#include <vector>
namespace base
{
    class quick_sort
    {
    public:
        template<class T, template<typename...> typename C_>
        void operator()(typename C_<T>& input)
        {

            if (input.size() <= 1)  //迭代退出的条件
                return;

            auto first_value = *std::begin(input);

            C_<T> less_;    //小于初值的集合
            C_<T> greater_; //大于初值的集合

             //进行遍历筛选
            for (auto b = std::begin(input) + 1; b != std::end(input); ++b)
            {
                if (*b >= first_value)
                {
                    greater_.push_back(*b);
                }
                else
                {
                    less_.push_back(*b);
                }
            }

            operator()(greater_);   //将大于初选值的集合再次进行排序
            operator()(less_);      //将小于初选值的集合再次进行排序

            //连接集合
            input.clear();
            std::copy(less_.begin(), less_.end(), std::back_inserter<C_<T>>(input));
            input.push_back(first_value);
            std::copy(greater_.begin(), greater_.end(), std::back_inserter<C_<T>>(input));
        }
    };
}

测试程序:

  • main.cpp
#include <vector>
#include "executor.hpp"
#include "basic_alg.h"

#include "quick_sort.hpp"

int main(int argc, char** argv)
{
    std::vector<int> value{ 100,232,32,2,4,5,323,123,45 };

    base::print_msg("Before sort: ", value);
    base::executor<base::quick_sort>::exe(value);
    base::print_msg("After sort: ", value);
}

程序运行的结果

运行结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。