希尔排序(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年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...
随机推荐
- 【AR实验室】mulberryAR : ORBSLAM2+VVSION
本文转载请注明出处 —— polobymulberry-博客园 0x00 - 前言 mulberryAR是我业余时间弄的一个AR引擎,目前主要支持单目视觉SLAM+3D渲染,并且支持iOS端,但是该引 ...
- OpenCASCADE Expression Interpreter by Flex & Bison
OpenCASCADE Expression Interpreter by Flex & Bison eryar@163.com Abstract. OpenCASCADE provide d ...
- angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流
大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 【云知道】LoadRunner 录制问题集锦
关键词:各路录制小白汇集于此 虽然知道君对录制不感冒,但总是看到扎堆的人说这些问题,忍不住要站出来了. 百度虽好,帮助了很多小白,但关键是百度并没有排除错误内容,经过历史的几年传播,错的都快变对的了, ...
- .NET面试题集锦②(Part 二)
一.前言部分 文中的问题及答案多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复. ]; ArrayList my ...
- Web开发安全之文件上传安全
很长一段时间像我这种菜鸡搞一个网站第一时间反应就是找上传,找上传.借此机会把文件上传的安全问题总结一下. 首先看一下DVWA给出的Impossible级别的完整代码: <?php if( iss ...
- SQL中字符串拼接
1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456' ...
- Linux环境下常见漏洞利用技术(培训ppt+实例+exp)
记得以前在drops写过一篇文章叫 linux常见漏洞利用技术实践 ,现在还可以找得到(https://woo.49.gs/static/drops/binary-6521.html), 不过当时开始 ...
- 分享阿里云推荐码 IC1L2A,购买服务器可以直接打9折,另附阿里云服务器部署ASP.NET MVC5关键教程
阿里云推荐码为:IC1L2A 阿里云还是不错滴. 以windows server 2008 R2为例,介绍如何从全新的服务器部署MVC5 站点. 新购买的阿里云服务器是没有IIS的,要安装IIS: 控 ...