希尔排序C++实现
Posted heihei36
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序C++实现相关的知识,希望对你有一定的参考价值。
网上关于希尔排序的文章很多,清一色的一顿理论分析然后给出一致错误的代码实现,让人非常怀疑人生。其实,这个算法的现实也就十来行,真的不明白哪来这么多的一致的错误实现。
希尔排序的理论分析,我就不去复印粘贴了,大家自行检索,一大堆一大堆的。我只给出代码实现和必要的注释。
#include <vector>
#include <random.h>
#include <iostream>
void shell_sort(std::vector<int>& arr)
int j = 0;
// 计算gep,也就是分组的次数,gep为1停止
for (int gep = arr.size() / 2; gep > 0; gep /= 2)
/*
*
* 遍历每组的成员,请注意步长为gep
* 网上大量的错误代码就是这个地方的遍历次数没搞明白,导致理解起来非常吃力
* 错误代码的一般写法: for (int i = gep; i < arr.size(); i++)
*
*/
for (int i = gep; i < arr.size(); i += gep)
// 这个地方也蛮考究的,其实是一个交换排序,需要认真思考
int tmp = arr[i];
for (j = i; j >= gep && arr[j - gep] > tmp; j -= gep)
arr[j] = arr[j - gep];
以上是关于希尔排序C++实现的主要内容,如果未能解决你的问题,请参考以下文章