概述
今天看到了插入排序,升级版是希尔排序。然而明白了排序原理,但是代码死活和原理对不上。没办法,就是笨(~ ̄(OO) ̄)ブ
你看到希尔排序的原理图通常是这样的
感觉酷炫吊炸天,但是,真的不好和代码对应起来啊o(╥﹏╥)o
希尔排序的思想是分组插入。通常gap从length/2开始,每次/2。每隔gap的元素为一组,每组length/gap个元素,共gap组。所以一开始是每组2个元素进行插入排序,然后是4个,8个…
原理其实也不是很难嘛,接着来看下代码(C++):
template<typename T>
void shell_sort(T arr[], int len) {
int gap, i, j;
T temp;
for (gap = len >> 1; gap > 0; gap >>= 1)
for (i = gap; i < len; i++) {
temp = arr[i];
for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap)
arr[j + gap] = arr[j];
arr[j + gap] = temp;
}
}
看代码会发现,并不是每组独立进行插入排序的。而是依次在1组中插入第2个元素、2组中插入第2个元素…1组中插入第3个元素…。demo 实际执行效果如下:
以上~
最后
以上就是个性翅膀为你收集整理的【算法系列二】希尔排序的全部内容,希望文章能够帮你解决【算法系列二】希尔排序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复