快速排序C++实现

自己用来复习使用的:

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

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

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

            C_ less_;    //小于初值的集合
            C_ 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>(input));
            input.push_back(first_value);
            std::copy(greater_.begin(), greater_.end(), std::back_inserter>(input));
        }
    };
}

测试程序:

  • main.cpp
#include 
#include "executor.hpp"
#include "basic_alg.h"

#include "quick_sort.hpp"

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

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

程序运行的结果

运行结果

你可能感兴趣的:(快速排序C++实现)