常见算法之希尔排序java实践
2016-04-10 10:26
351 查看
希尔排序又称shell排序,它是插入排序的一种改进。又称最小增量排序。
在插入排序中,若要插入的元素很小,则需要移动数组多大多数元素,才能将元素插入正确位置。
希尔排序把数组分成几个小组,组内元素的增量是n/2,这样在组内进行插入排序时,就能大跨度地移动元素,大大减少了插入排序的移动次数。(算法优越之处)
希尔排序不稳定。
时间复杂度o(nlogn).
空间复杂度o(1)
基本思想:
1、将待排序数组按增量d=n/2分成若干组,每组记录下标相差d。
2、对每组元素进行插入排序。
3、减少d值,一般取d=d/2,重复步骤1、2.当d=1时,进行完插入排序后,结束。
图例如下:
java实现源码如下:
运行结果如下:
1
3
6
12
34
45
54
56
78
100
参考文章:
1、http://wenku.baidu.com/link?url=hxOnf1fVCAdn1wClZZDWzguCBJoRVmOGQFfYiynareEviuW4qy49LM0VL_bH1iGDmA8BHSEPLFLBpmIEUUZdqIWg5UNaqXwb2XOeEka1Bp3
2、http://www.cnblogs.com/hexiaochun/archive/2012/09/11/2679583.html
在插入排序中,若要插入的元素很小,则需要移动数组多大多数元素,才能将元素插入正确位置。
希尔排序把数组分成几个小组,组内元素的增量是n/2,这样在组内进行插入排序时,就能大跨度地移动元素,大大减少了插入排序的移动次数。(算法优越之处)
希尔排序不稳定。
时间复杂度o(nlogn).
空间复杂度o(1)
基本思想:
1、将待排序数组按增量d=n/2分成若干组,每组记录下标相差d。
2、对每组元素进行插入排序。
3、减少d值,一般取d=d/2,重复步骤1、2.当d=1时,进行完插入排序后,结束。
图例如下:
java实现源码如下:
public class ShellSort { public void shellSort() { int a[] = { 1, 54, 6, 3, 78, 34, 12, 45, 56, 100 }; double d1 = a.length; int temp = 0; while (true) { d1 = Math.ceil(d1 / 2); int d = (int) d1; for (int x = 0; x < d; x++) { //每一组 for (int i = x + d; i < a.length; i += d) { //组内元素 int j = i - d; temp = a[i]; for (; j >= 0 && temp < a[j]; j -= d) { //插入排序 a[j + d] = a[j]; } a[j + d] = temp; } } if (d == 1) break; } for (int i = 0; i < a.length; i++) System.out.println(a[i]); } public static void main(String[] args) { ShellSort shellSort = new ShellSort(); shellSort.shellSort(); } }
运行结果如下:
1
3
6
12
34
45
54
56
78
100
参考文章:
1、http://wenku.baidu.com/link?url=hxOnf1fVCAdn1wClZZDWzguCBJoRVmOGQFfYiynareEviuW4qy49LM0VL_bH1iGDmA8BHSEPLFLBpmIEUUZdqIWg5UNaqXwb2XOeEka1Bp3
2、http://www.cnblogs.com/hexiaochun/archive/2012/09/11/2679583.html
相关文章推荐
- C++实现简单的希尔排序Shell Sort实例
- 希尔排序的算法代码
- c语言实现冒泡排序、希尔排序等多种算法示例
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- 计算机科学中32个常用的基础算法
- JavaScript排序算法之希尔排序的2个实例
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- java高级排序之希尔排序
- java数组排序示例(冒泡排序、快速排序、希尔排序、选择排序)
- java 中基本算法之希尔排序的实例详解
- Java排序算法总结之希尔排序
- java 数据结构基本算法希尔排序
- 小蚂蚁学习数据结构(36)——插入排序中的希尔排序
- 简单实现希尔排序
- 排序算法 java版本
- 各种排序方法java实现
- 排序算法总结
- java排序-希尔排序
- 几种常见排序算法的比较与实现
- 常用排序