希尔排序和shell之希尔排序
来源:互联网 发布:大屏数据可视化 编辑:程序博客网 时间:2024/05/02 00:25
希尔排序
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
基本思想
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
如下图:
c++版
void ShellSort(int *array,int size){if (array == NULL || size < 0)return;int gap = size;while (gap > 1){gap = gap / 3 + 1;for (int idx = gap; idx < size; ++idx){int end = idx - gap;int temp = array[idx];while (end >= 0 && array[end] > temp){array[end + gap] = array[end];end -= gap;}array[end+gap] = temp;}}for (int i = 0; i < 6; ++i){cout << array[i] << " ";}cout << endl;}
shell脚本版
#!/bin/bashecho "shellsort"function shellsort(){arr=(1 3 4 0 5 2 7 8)len=${#arr[*]}gap=$lenwhile [ $gap -gt 1 ]dolet gap=gap/3+1for((idx=gap;idx<len;idx++))dolet end=idx-gaplet temp=arr[idx]let save=${arr[$end]}while [ $end -ge 0 -a $save -gt $temp ]dolet arr[end+gap]=arr[end]let end-=gapif [ $end -ge 0 ];thenlet save=arr[end]fidonelet arr[end+gap]=tempdonedoneecho ${arr[*]}}shellsort
阅读全文
0 0
- 希尔排序和shell之希尔排序
- SHELL排序,希尔排序
- Shell Sort (排序详解之 希尔排序)
- 排序之希尔排序(Shell Sort)
- 插入排序之希尔(shell)排序
- 插入排序和希尔(Shell)排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- 排序之希尔排序
- js设计模式之订阅
- 大数据竞赛平台——Kaggle 入门篇
- 资讯精选|潜在杀人凶器?VR设备、无人机、平衡车的死穴在“声音”!
- LCT模板(link-cut-tree)
- Selenium环境的安装搭建
- 希尔排序和shell之希尔排序
- HTTP系列之HTTP概念解释
- hdu1556 Color the ball【树状数组 || 线段树 || 技巧*区间修改】
- eclipse4.x下安装SVN时,选择SVN CONNECTOR时报错解决方法!!!
- 设计模式之代理模式
- 自定义控件(8)处理标签间的内容ParseChildrenAttribute
- ext中根据grid中当前row的内容设置row的背景色
- JAVA设计模式——单例模式
- 日语词汇辨析:以来と以降と以後