Program work 15. Shell Sort in Java
来源:互联网 发布:java 敏感词过滤 开源 编辑:程序博客网 时间:2024/06/05 18:23
Shell本质上就是insertion sort
但是在insertion sort之前, 先做gap大于1的insertion sort
这样在最后一步做insertion sort的时候, 由于数组已经接近排序完成
所以最后的insertion sort会非常快, 最后一步O(n)
时间复杂度根据gap的选取而不同. 这里使用Hibbard的gap, 2的k次方-1: [1, 3, 7, 15, 31, 63, ...]
时间复杂度最好最差和平均都是O(n的3/2次方)
Pseudocode:
gaps = [1, 3, 7, 15, 31, 63, ...]# Start with the largest gap and work down to a gap of 1 foreach (gap in gaps){ for (i = gap; i < n; i += 1) { temp = a[i] for (j = i; j >= gap and a[j - gap] > temp; j -= gap) { a[j] = a[j - gap] } a[j] = temp }}
package ncku.cdc.sorting;import java.util.Random;public class ShellSort { private int[] sequence; public ShellSort(int size, int range) { sequence = new int[size]; Random rand = new Random(); for (int i = 0; i < size; i++) { sequence[i] = rand.nextInt(range); } } public static void main(String[] args) { int size = Integer.valueOf(args[0]); int range = Integer.valueOf(args[1]); ShellSort shell = new ShellSort(size, range); System.out.println("before shellSort:"); SortingTools.validation(shell.getSequence(), 0); shell.shellSort(shell.getSequence(), size); System.out.println("after shellSort:"); SortingTools.validation(shell.getSequence(), 0); } public void shellSort(int[] arr, int len) { int gap = 1; while (gap * 2 + 1 < len) { gap = gap * 2 + 1; } for (; gap > 0; gap = getGap(gap)) { for (int i = gap; i < len; i++) { int tmp = arr[i]; int j = i; while (j >= gap && tmp < arr[j - gap]) { arr[j] = arr[j - gap]; j -= gap; } arr[j] = tmp; } } } private int getGap(int gap) { int g; g = (gap - 1) / 2; return g; } public int[] getSequence() { return sequence; }}
程序输入: 35 200. 表示生成长度为35, 数字范围在[0, 200)的数组.
程序输出:
before shellSort:
149 37 61 88 140 191 47 177 87 12 148 37 90 84 135 52 81 98 108 97 57 194 43 184 124 143 77 46 36 134 28 133 80 98 111
after shellSort:
12 28 36 37 37 43 46 47 52 57 61 77 80 81 84 87 88 90 97 98 98 108 111 124 133 134 135 140 143 148 149 177 184 191 194
0 0
- Program work 15. Shell Sort in Java
- Program work 11. Quick Sort in Java
- Program work 12. Merge Sort in Java
- Program work 13. Heap Sort in Java
- Program work 14. Insertion Sort in Java
- Program work 16. Radix Sort in Java
- Program work 17. Selection Sort in Java
- Program work 18. Bubble Sort in Java
- shell script in work
- Startup a JAVA standalone program in UNIX use shell script
- path in java program
- Encoding in Java program
- java shell sort
- JAVA Shell Sort
- The Program of Algorithms ------- Sorting in Linear Time---- Counting Sort
- The Program of Algorithms ------- Sorting in Linear Time---- Bucket Sort
- 在shell中call Java program...
- Shell Program
- s2sh整合步骤
- 陈怡暖:白银冲高回落,反弹局面不改
- MD5加密
- Adroid Fragment的使用
- WEB架构师成长之路之二-大牛的法宝
- Program work 15. Shell Sort in Java
- 使用unixodbc连接 ORACLE数据库的配置方法
- 计算机各种编码
- 用命令行来启动应用,如QQ这类的,提升逼格,大牛勿喷,3Q
- strstr函数
- warning C4482: 使用了非标准扩展: 限定名中使用了枚举
- 欢迎使用CSDN-markdown编辑器
- hdu 1261 排列组合&&大数除法
- Ubuntu 13.04下构建Qt5开发环境