插入排序和希尔排序(Java实现)
来源:互联网 发布:网络职业推手公司 编辑:程序博客网 时间:2024/06/06 22:49
1、插入排序
插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。
2、插入排序Java代码实现
/** * @Comment 插入排序 * @Author Ron * @Date 2017年11月9日 上午11:53:06 * @return */ static void insertSort(int[] source){ for(int i=1; i < source.length; i++){ if(source[i-1] > source[i]){ int insertData = source[i]; int j=i; while (j > 0 && source[j-1] > insertData) { source[j]=source[j-1]; j--; } source[j]=insertData; } } }
3、希尔排序
希尔排序算法是插入排序的一种更高效的改进版本。它的作法不是每次一个元素挨一个元素的比较。而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率。希尔排序对增量序列的选择没有严格规定。
希尔排序是基于插入排序的以下两点性质而提出改进方法的:
- 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
- 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位
4、希尔排序算法思路
- 先取一个正整数 d1(d1 < n),把全部记录分成 d1 个组,所有距离为 d1 的倍数的记录看成一组,然后在各组内进行插入排序
- 然后取 d2(d2 < d1)
- 重复上述分组和排序操作;直到取 di = 1(i >= 1) 位置,即所有记录成为一个组,最后对这个组进行插入排序。一般选 d1 约为 n/2,d2 为 d1 /2, d3 为 d2/2 ,…, di = 1
5、希尔排序实例分析
假设有数组 array = [80, 93, 60, 12, 42, 30, 68, 85, 10],首先取 d1 = 4,将数组分为 4 组,如下图中相同颜色代表一组:
然后分别对 4 个小组进行插入排序,排序后的结果为:
然后,取 d2 = 2,将原数组分为 2 小组,如下图:
然后分别对 2 个小组进行插入排序,排序后的结果为:
最后,取 d3 = 1,进行插入排序后得到最终结果:
6、希尔排序Java实现
/** * @Comment 希尔排序 * @Author Ron * @Date 2017年11月9日 上午11:53:37 * @return */ static void shellSort(int[] source){ int group = source.length/2; while (group > 0) { for(int i=group; i<source.length; i++){ if(source[i-group] > source[i]){ int insertData = source[i]; int j=i; while (j > group-1 && source[j-group] > insertData) { source[j]=source[j-group]; j-=group; } source[j]=insertData; } } group = group/2; } }
阅读全文
0 0
- 插入排序和希尔排序(Java实现)
- 算法系列(二)冒泡排序、选择排序、插入排序和希尔排序(Java实现)
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- Java实现插入排序之希尔排序
- java直接插入排序和希尔排序
- 插入排序 和 希尔排序 java
- 直接插入排序,希尔排序(java实现)
- 排序算法--插入排序(直接插入排序、希尔排序)Java实现
- 【常用排序算法】插入排序/二分插入排序/希尔排序 (Java实现)
- 选择排序、插入排序、希尔排序和冒泡排序-Java实现
- Java---插入类排序(直接插入排序,希尔排序)
- Java实现选择排序、插入排序、希尔排序算法
- 经典排序算法(二)--插入排序、希尔排序(Java实现)
- 【插入排序】希尔排序--Java
- 算法-排序-插入排序(直接插入和希尔排序)
- 插入排序(直接插入排序和希尔(shell)排序
- 插入排序(直接插入排序和希尔排序)
- 插入排序算法实现(直接插入排序和希尔排序)
- sql判断一个表是否存在 以及表中的字段是否存在
- test
- 上海大数据高峰论坛—暨OurwayBI新品发布会即将开启!
- 解决Error:(3) Error: "app_name" is not translated in "zh" (Chinese) [MissingTranslation]
- tiny4412 移植ffmpeg 不适用命令行,使用C代码方式压缩视频
- 插入排序和希尔排序(Java实现)
- 阿里云RDS新建数据库与导入
- 关于Android之WebView加载网页缓存和清除问题
- huigu
- PG10的函数比PG9.6变化不少
- tar中的参数 cvf,xvf,cvzf,zxvf的区别
- mac 终端中添加tree命令显示文件目录结构
- python多进程笔记2
- 猿们平常都喜欢听啥音乐?