希尔排序(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年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...
随机推荐
- In-Memory:在内存中创建临时表和表变量
在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...
- MVVM模式解析和在WPF中的实现(三)命令绑定
MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- 关于这段时间学习 EntityFramework的 一点感悟
Ado.Net,用了N多年,Entity Framework也关注了很多年. 每当项目转型的时候,就花费大巴的时间,学习一番,潮流的东西. 这个Orm很多,这个EF很火,这么多年了,我还是不敢用,虽然 ...
- 【WCF】使用“用户名/密码”验证的合理方法
我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...
- 带你实现开发者头条APP(三) 首页实现
title: 带你实现开发者头条APP(三) 首页实现 tags: 轮播广告,ViewPager切换,圆形图片 grammar_cjkRuby: true --- 一.前言 今天实现开发者头条APP的 ...
- IE8/9 JQuery.Ajax 上传文件无效
IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ...
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
- Zabbix 漏洞分析
之前看到Zabbix 出现SQL注入漏洞,自己来尝试分析. PS:我没找到3.0.3版本的 Zabbix ,暂用的是zabbix 2.2.0版本,如果有问题,请大牛指点. 0x00 Zabbix简介 ...
- Linux基础介绍【第二篇】
远程连接Linux的原理 SHH远程连接介绍 当前,在几乎所有的互联网企业环境中,最常用的Linux提供远程连接服务的工具就是SSH软件,SSH分为SSH客户端和SSH服务端两部分.其中,SSH服务端 ...
- photoshop:无法完成请求 因为暂存盘已满
今天photoshop打开一个问题,提醒:无法完成请求因为暂存盘已满 不用担心这个问题很好解决可能是你做的图比较大并不需要清理C盘空间 选择:编辑→首选项→暂存盘 设置第一暂存盘为D盘或E盘 总之 第 ...