基础算法系列(十六)排序算法之希尔排序
来源:互联网 发布:java junit单元测试 编辑:程序博客网 时间:2024/06/05 18:08
基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
希尔排序过程图解:
数组:45,20,80,40,26,58,66,70
d=5时 分组为:45,58
20,66
80,70
排完后为: 45,20,70,40,26,58,66,80
d=3时 分组为:45,40,66
20,26,80
70,58
40,66
26,80
排完后为:40,20,58,45,26,70,66,80
d=1时 分组为:40,20,58,45,26,70,66,80
排序后直接得到结果:
20 26 40 45 58 66 70 80
<span style="font-size:14px;">/** * 希尔排序升序 * */public static int sort_xier_asc(int[] array) {int count = 0;if (array.length < 2)return count;if (array.length == 2) {if (array[0] < array[1])return count;else {count++;int temp = array[1];array[1] = array[0];array[0] = temp;return count;}}int shell = array.length / 2;if (shell % 2 == 0)shell++;for (int d = shell; d > 0; d -= 2)for (int i = 0; i < array.length - d; i++) {for (int j = i; j < array.length; j = j + d)for (int k = j; k > 0; k = k - d) {if (k < d)break;if (array[k] < array[k - d]) {count++;int tmp;tmp = array[k];array[k] = array[k - d];array[k - d] = tmp;}}}return count;}</span>
/** * 希尔排序降序 * */public static int sort_xier_dasc(int[] array) {int count = 0;if (array.length < 2)return count;if (array.length == 2) {if (array[0] > array[1])return count;else {count++;int temp = array[1];array[1] = array[0];array[0] = temp;return count;}}int shell = array.length / 2;if (shell % 2 == 0)shell++;for (int d = shell; d > 0; d -= 2)for (int i = 0; i < array.length - d; i++) {for (int j = i; j < array.length; j = j + d)for (int k = j; k > 0; k = k - d) {if (k < d)break;if (array[k] > array[k - d]) {count++;int tmp;tmp = array[k];array[k] = array[k - d];array[k - d] = tmp;}}}return count;}
0 0
- 基础算法系列(十六)排序算法之希尔排序
- 基础算法之希尔排序
- 算法基础之----希尔排序
- 七大排序算法系列之希尔排序
- 排序算法系列之希尔排序
- 排序算法系列之希尔排序
- 【十六】排序算法(二)--希尔排序算法
- 算法基础之排序篇-希尔排序
- 排序算法系列---希尔排序(C++)
- 算法基础-希尔排序
- 【算法基础】希尔排序
- 基础算法-希尔排序
- 基础算法系列(七)——希尔排序
- 算法之希尔排序
- 算法之希尔排序
- 算法之希尔排序
- 算法之希尔排序
- 排序算法之希尔排序(Shellsort)
- 手游团队如何提高生存能力
- Java数组操作的10大方法
- 图片服务器设计(ImageMagick)
- 【ANDROID】Android 在oncreate() 方法中调用 findViewById 返回 null 问题的原因和解决方法
- Android4.22来电铃声流程
- 基础算法系列(十六)排序算法之希尔排序
- ssh能够连接而sftp不能连接的解决方法
- poj 2239 Selecting Courses
- 货币贬值对社会的影响
- Oracle学习笔记---用户管理
- WPF ContextMenus 将两个contextmenus的内容拼接成一个
- 展望2015消费经济之云
- 我开博客啦
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题