lintcode 整数排序 | 希尔排序算法(Java)
来源:互联网 发布:大数据需要掌握的技术 编辑:程序博客网 时间:2024/06/04 19:09
题目
给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。
样例
对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。
希尔排序
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
详细讲解戳这里百度百科
代码
public class Solution { /** * @param A an integer array * @return void */ public void sortIntegers(int[] A) { int d = A.length; if (d <= 1) return;//过滤为空或者长度为1的数组 while (true){//一直循环直到增量为1 d = d/2;//每次增量缩小的比列,一般取一半,如果刚开始增量缩小的太小,容易造成超时,例如 d = d/5 for(int x=0; x<d; x++){//从第0个开始循环,循环一组,即到增量的大小 for (int i = x+d; i<A.length; i= i+d){//根据增量大小选出每组 int temp = A[i]; int j; //将每组的数据选中的那个和他前面的进行比较,如果前面的数字大则进行交换,注意这里是j>=0 for (j = i-d; j>=0&&A[j]>temp; j = j-d){ A[j+d] = A[j]; } //因为每次j = j-d,所以循环后j要加d 才是要交换的那个 A[j+d] = temp; } } if (d == 1){ break; } } }}
算法题目地址:http://www.lintcode.com/zh-cn/problem/sort-integers/
阅读全文
0 0
- lintcode 整数排序 | 希尔排序算法(Java)
- lintcode整数排序|冒泡排序算法(Java)
- lintcode整数排序|选择排序算法(Java)
- lintcode整数排序|插入排序算法(Java)
- 排序算法--希尔排序(JAVA)
- Java排序算法--希尔排序(Shellsort)
- java希尔排序算法
- java希尔排序算法
- java希尔排序算法
- Java算法-希尔排序
- Java排序算法 希尔排序
- Java排序算法:希尔排序
- JAVA排序算法---希尔排序
- lintcode 整数排序 II | 归并排序(Java)
- lintcode 整数排序 II | 快速排序(Java)
- 【LintCode-463】整数排序(Java实现-冒泡排序优化)
- Java排序算法(八):希尔排序(Shell排序)
- Java排序算法(八):希尔排序(Shell排序)
- nmap搭建及命令简介
- 习题5-9 找bug(Bug Hunt, UVa1596)
- mysql 存储过程 游标
- 创建、编译ros package
- WebView里面调用打电话
- lintcode 整数排序 | 希尔排序算法(Java)
- 斐波那契数列的余数周期问题
- SSH之传统方式接入分布式会话(Spring Session)篇
- springboot集成fastdfs
- Find All Numbers Disappeared in an Array(哈希表)
- Eclipse 各个版本区别
- c++中的类型转换方法
- Android开发大牛们的博客地址
- Elasticsearch安装与测试