时间复杂度为O( n^(3/2) )
不是一个稳定的排序算法 如何看一个算法是否稳定:
{("scala",12),("python",34),("c++",12),("c",76),("java",44)}
scala和c++的值相等,排序前scala在c++的前面 如果排序后
{("scala",12),("c++",12),("python",34),("java",44),("c",76)}//scala还是在c++的前面,稳定
{("c++",12),("scala",12),("python",34),("java",44),("c",76)}//scala在c++的后面,不稳定
package com.sort.shell;

public class ShellSort {

    public static void swap(int[] list, int a, int b){
int temp;
temp = list[a];
list[a] = list[b];
list[b] = temp;
} public static void print(int list[]){
for(int i=; i<list.length; i++){
System.out.print(" "+list[i]);
}
} /**
* {0,9,1,5,8,3,7,4,6,2}
*
* int increment = L.length-1;
* 设置一个增量increment
* increment = increment/3+1;
* increment=4
* i=5 , 从5号到9号遍历
* 让1号和5号比较,如果1号大于5号,就交换位置
* 2号和6号比较,如果2号不大于6号,就不动
* 3号和7号比较、(3-4)!> 0,结束
* 4号和8号比较 (4-4)!> 0,结束
* 5号和9号比较,发现(5-4=1)>0,就让1号和5号比较,(1-4)!>0,结束
*
* increment = increment/3+1;
* increment=2
* i=3,从3号到9号遍历
* 1号和3号比较(1-3)!> 0,结束
* 2号和4号比较
* 3号和5号比较,1号和3号比较
* 4号和6号比较,2号和4号比较
* 5号和7号比较,3号和5号比较,1号和3号比较
* 6号和8号比较,4号和6号比较,2号和4号比较
* 7号和9号比较,5号和7号比较,3号和5号比较,1号和3号比较
*
* increment = increment/3+1;
* increment = 1
* 2号到9号遍历
* 2号和1号比较
* 3号和2号比较
* .......
*
* */
public static void shellSort(int[] L){
int i,j;
int increment = L.length-;
do{
increment = increment/+; //增量序列
for(i=increment+; i<=L.length-; i++){
if(L[i] < L[i-increment]){
L[] = L[i]; // 暂存在L[0]
for(j=i-increment; j> && L[]<L[j]; j-=increment){
L[j+increment] = L[j]; //记录后移,查找插入位置
}
L[j+increment] = L[]; //插入
}
}
}while(increment > );
} public static void sort(int[] list){
//前奏工作
int [] L = new int[list.length+];
L[] = ; // 让0号元素为作为暂存数据的位置
for(int i=; i<L.length; i++){
L[i] = list[i-];
} shellSort(L);//进行希尔排序 //收尾工作
for(int i=; i<L.length; i++){
list[i-] = L[i];
}
} public static void main(String[] args) { int [] list = new int[]{,,,,,,,,};
print(list);
System.out.println();
sort(list);
print(list);
} }

希尔排序(java)的更多相关文章

  1. 希尔排序及希尔排序java代码

    原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序 ...

  2. 希尔排序java

    希尔排序简述 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率.(希尔排序先将部分数据进行排序,相当于已经部分排好序) ...

  3. 希尔排序----java实现

    思路:希尔排序是分组基础上的直接插入排序,给定的一个步长数组,每个小组先直接插入排序.虽然有四次循环,但是每次循环次数少. package com.sheepmu.text; import java. ...

  4. 排序---希尔排序Java

    希尔排序 插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减 ...

  5. 冒泡排序 选择排序 插入排序希尔排序 java

    双向冒泡 package com.huang; public class _014_bubb_sort { int[] b={1,2}; static int a[]={12,4,35,65,43,6 ...

  6. 插入排序与希尔排序Java实现

    public class TestMain { public static void main(String[] args) { Integer[] a = new Integer[5000]; fo ...

  7. 希尔排序——Java实现

    一.排序思想 希尔排序(Shell’s Sort)是插入排序的一种,是直接插入排序算法的一种更高版本的改进版本. 把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序: 随着步长逐渐减小,所 ...

  8. 希尔排序java代码

    //希尔排序 通过测试 public class ShellSortTest{ public static void shellSort(int [] arrays){ for(int d=5;d&g ...

  9. C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)

    希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...

随机推荐

  1. Java中的多态

    1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal {public abstract void Say();} 子类: public class ...

  2. ABP文档 - Mvc 视图

    文档目录 本节内容: 简介 AbpWebViewPage 基类 简介 ABP通过nuget包Abp.Web.Mvc集成到Mvc视图里,你可以像往常那样创建常规的视图. AbpWebViewPage 基 ...

  3. SQL Server-聚焦在视图和UDF中使用SCHEMABINDING(二十六)

    前言 上一节我们讨论了视图中的一些限制以及建议等,这节我们讲讲关于在UDF和视图中使用SCHEMABINDING的问题,简短的内容,深入的理解,Always to review the basics. ...

  4. 开源一个跨平台运行的服务插件 - TaskCore.MainForm

    本次将要很大家分享的是一个跨平台运行的服务插件 - TaskCore.MainForm,此框架是使用.netcore来写的,现在netcore已经支持很多系统平台运行了,所以将以前的Task.Main ...

  5. nodejs模块发布及命令行程序开发

    前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...

  6. 操作系统篇-hello world(免系统运行程序)

     || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言     今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...

  7. ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)

    操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...

  8. Android开发学习——画横线竖线

    画横线/竖线 竖线 <View android:layout_width="1dp" android:layout_height="match_parent&quo ...

  9. iOS之ProtocolBuffer搭建和示例demo

    这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...

  10. iOS开发--ChildViewController实现订单页的切换

    先不说废话, 上效果图, 代码量也不大, 也不上传github骗星星了, 你们复制粘贴下代码, 就可以轻而易举的弄出一个小demo. 这个代码的实现并不复杂, 甚至于说非常简单, 就是逻辑有点小绕, ...