希尔排序(java)
时间复杂度为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)的更多相关文章
- 希尔排序及希尔排序java代码
原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序 ...
- 希尔排序java
希尔排序简述 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率.(希尔排序先将部分数据进行排序,相当于已经部分排好序) ...
- 希尔排序----java实现
思路:希尔排序是分组基础上的直接插入排序,给定的一个步长数组,每个小组先直接插入排序.虽然有四次循环,但是每次循环次数少. package com.sheepmu.text; import java. ...
- 排序---希尔排序Java
希尔排序 插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减 ...
- 冒泡排序 选择排序 插入排序希尔排序 java
双向冒泡 package com.huang; public class _014_bubb_sort { int[] b={1,2}; static int a[]={12,4,35,65,43,6 ...
- 插入排序与希尔排序Java实现
public class TestMain { public static void main(String[] args) { Integer[] a = new Integer[5000]; fo ...
- 希尔排序——Java实现
一.排序思想 希尔排序(Shell’s Sort)是插入排序的一种,是直接插入排序算法的一种更高版本的改进版本. 把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序: 随着步长逐渐减小,所 ...
- 希尔排序java代码
//希尔排序 通过测试 public class ShellSortTest{ public static void shellSort(int [] arrays){ for(int d=5;d&g ...
- C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)
希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...
随机推荐
- C# 在腾讯的发展
本文首发我的微信公众号"dotnet跨平台", 内容得到大家热烈的欢迎,全文重新发布在博客,欢迎转载,请注明出处. .NET 主要的开发语言是 C# , .NET 平台泛指遵循EC ...
- hibernate多对一双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- [.NET] 利用 async & await 进行异步 IO 操作
利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html 序 上次,博主 ...
- spring注解源码分析--how does autowired works?
1. 背景 注解可以减少代码的开发量,spring提供了丰富的注解功能.我们可能会被问到,spring的注解到底是什么触发的呢?今天以spring最常使用的一个注解autowired来跟踪代码,进行d ...
- Java FtpClient 实现文件上传服务
一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...
- 【转】外部应用和drools-wb6.1集成解决方案
一.手把手教你集成外部应用和drools workbench6.1 1. 首先按照官方文档安装workbench ,我用的是最完整版的jbpm6-console的平台系统,里面既包含j ...
- NGINX引入线程池 性能提升9倍
1. 引言 正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求.为 ...
- Maven搭建SpringMVC+Hibernate项目详解 【转】
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...