数据结构与算法分析(Java语言描述)(4)—— 希尔排序
来源:互联网 发布:js object 数组去重 编辑:程序博客网 时间:2024/06/05 18:28
int n = arr.length;int h = 1;while(h < n/3){ h = h*3 + 1;}while(h >= 1){ for(int i = h; i < n; i++){ int temp = arr[i]; int j = i; for( ; j >=h; j-=h){ if(arr[j-h].compareTo(temp) > 0){ arr[j] = arr[j-1]; }else{ break; } } arr[j] = temp; } h /= 3;}
ShellSort.java
package com.algorithm.sort;public class ShellSort { private ShellSort(){} public static void sort(Integer[] arr){ int n = arr.length; int h = 1; // 计算 increment sequence: 1, 4, 13, 40, 121, 364, 1093... while (h < n/3){ h = h * 3 + 1; } while (h >= 1) { // 对 arr[i], arr[i-h], arr[i-2*h], arr[i-3*h]... 使用插入排序 for (int i = h; i < n; i++) { Integer temp = arr[i]; int j = i; for (; j >= h; j = j - h) { if (arr[j - h].compareTo(temp) > 0) { arr[j] = arr[j - h]; } else { break; } } arr[j] = temp; } h /= 3; } } // 单元测试 public static void main(String[] args) { int N = 20000; Integer[] arr = SortTestHelper.generateRandomArray(N, 0, 100000); System.out.println("排序前的数组为:"); SortTestHelper.printArray(arr); Long start = System.currentTimeMillis(); ShellSort.sort(arr); Long end = System.currentTimeMillis(); System.out.println("-------------------------------------------"); System.out.println("排序后的数组为:"); SortTestHelper.printArray(arr); System.out.println("-------------------------------------------"); System.out.println("排序后的数组是否有序:"); if (SortTestHelper.isSorted(arr)){ System.out.println("数组有序~"); } else { System.out.println("数组无序!"); } System.out.println("-------------------------------------------"); System.out.println( "排序算法的运行时间为"+ " : " + (end-start) + "ms" ); }}
阅读全文
0 0
- 数据结构与算法分析(Java语言描述)(4)—— 希尔排序
- 排序 (插入排序,快速排序,希尔排序)数据结构与算法分析-C语言描述
- (数据结构与算法分析 八)------插入排序,希尔排序,归并排序的实现( Java语言描述)
- 《数据结构与算法分析(c描述)》—— 插入排序&希尔排序
- 数据结构与算法分析(Java语言描述)(8)—— (随机)快速排序
- 数据结构与算法分析(Java语言描述)(9)—— (双轴)快速排序
- 数据结构与算法分析(Java语言描述)(1)—— 选择排序
- 数据结构与算法分析(Java语言描述)(2)—— 插入排序
- 数据结构与算法分析(Java语言描述)(3)—— 冒泡排序
- 数据结构与算法分析(Java语言描述)(5)—— 归并排序
- 数据结构与算法分析(Java语言描述)(7)—— 快速排序
- 数据结构与算法分析(Java语言描述)(13)—— 原地堆排序
- 数据结构与算法(9)---Java语言实现:希尔排序
- 数据结构与算法分析(Java语言描述)(12)—— 堆排序与数组建堆
- 数据结构与算法——希尔排序(Java实现)
- 数据结构与算法分析(Java语言描述)(6)—— 归并排序(自底向上)
- 数据结构与算法分析(Java语言描述)(10)—— (三向切分)快速排序
- 读书笔记:数据结构与算法分析(Java语言描述)——数据结构概论
- SMB实现共享文件(上传、下载)
- Android中aCache缓存机制详解
- Android性能优化之内存优化
- STM32 BOOT模式配置以及作用
- Line belt HDU
- 数据结构与算法分析(Java语言描述)(4)—— 希尔排序
- 微信APP支付常见开发问题解答
- Map
- PHP反序列化漏洞学习总结
- 获取和设置环境变量函数
- 17.11.2日报
- 天生爱分享
- 此生无悔入联盟,来世愿生峡谷中
- java web环境搭建