希尔排序C++实现
文章图片
很有意思,有点像归并排序,但是分组的策略不同。希尔排序的分组策略是a[i+k*gap]一组,k=0,1,2…。
【C++|希尔排序——C++实现】template_head.h
#include
#include "../head_file/template_head.h"
#include using namespace std;
void shell_sort()
{
cout << "Shell Sort!!!" << endl;
vector sort_list = { 8,9,1,7,2,3,5,4,6,0 };
shellSort(sort_list.begin(), sort_list.end());
for (auto x : sort_list) {
cout << x << " ";
}
cout << endl;
}template
void shellSort(const Iterator& begin, const Iterator& end)
{
shellSort(begin, end, less_{});
}template
void shellSort(const Iterator& begin, const Iterator& end, Comparator lessThan)
{
if (begin == end)
return;
auto size = end - begin;
for (auto gap = size / 2 ;
gap > 0;
gap /= 2) {
for (Iterator i = begin + gap;
i != end;
i++) {
auto tmp = std::move(*(i));
Iterator j;
for (j = i;
j >= begin+gap && lessThan(tmp, *(j - gap));
j -= gap) {
*j = std::move(*(j - gap));
// 向后移动一个gap
}
*j = std::move(tmp);
}
}}
推荐阅读
- 数据结构|C语言实现插入排序——希尔排序算法
- C++单例模式双重锁漏洞(内存读写的乱序执行(编译器问题))
- 机试编程题|HJ33 整数与IP地址间的转换
- 算法|2020 必学的10大顶级 Python 开源库
- 蓝桥杯|2022年蓝桥杯省赛真题解析(C++B组)
- c++|2022十三届蓝桥杯体验
- 蓝桥杯|浅谈2022第十三届蓝桥杯c/c++b组
- 令人快乐的刷题小妙招|【2022第十三届蓝桥杯】c/c++ 大学c组 解题报告
- YOLO|Ubuntu18.04配置darknet环境实现YOLOv4目标检测(五)——darknet YOLOv4和YOLOv4-tiny模型转ONNX转TensorRT部署