希尔排序之Java实现

一、方法一

 package cn.com.zfc.lesson21.sort;

 /**
*
* @title ShellSort
* @describe 希尔排序 1959 年发明的
* @author 张富昌
* @date 2016年10月1日下午5:35:50
*/
public class ShellSort_1 {
// 希尔排序是对插入排序的一种改进。
// 基本思想:先将整个待排数据元素序列分割成若干个子序列,分别对各个子序列进行直接插入排序。
// 等整个序列中的数据元素“基本有序”时,在对整体元素进行一次直接插入排序
// 时间复杂度:O(n) ~ O(n^2)
public static void main(String[] args) {
// 声明整型数组
int[] array = new int[10];
// 使用循环和随机数初始化数组
for (int i = 0; i < array.length; i++) {
array[i] = (int) Math.round(Math.random() * 100);
}
System.out.println("原始数组为:");
for (int i : array) {
System.out.print(i + " ");
}
System.out.println();
System.out.println("排序后的数组为:");
array = shellSort(array);
for (int i : array) {
System.out.print(i + " ");
}
} /**
*
* 功能:冒泡排序的变种,希尔排序的基本思想是:首先按照一个序列递减的方法逐渐进行排序
*
* 参数:int[] array
*
* 返回类型:int[]
*/
public static int[] shellSort(int[] array) {
// 使用临时数组,替代原始数组
int[] arr = array;
// 以增量 i进行直接插入排序
int gap = arr.length;
do {
gap = gap / 2;
for (int i = gap; i < arr.length; i++) {
for (int j = i; j >= gap; j -= gap) {
// 较小的数排在前面
if (arr[j] < arr[j - gap]) {
int temp = arr[j];
arr[j] = arr[j - gap];
arr[j - gap] = temp;
} else {
break;
}
}
}
} while (gap > 1); return arr;
}
}

运行结果:

二、方法二

 package cn.com.zfc.lesson21.sort;

 /**
*
* @title ShellSort
* @describe 希尔排序 1959 年发明的
* @author 张富昌
* @date 2016年10月1日下午5:35:50
*/
public class ShellSort_2 {
// 希尔排序是对插入排序的一种改进。
// 基本思想:先将整个待排数据元素序列分割成若干个子序列,分别对各个子序列进行直接插入排序。
// 等整个序列中的数据元素“基本有序”时,在对整体元素进行一次直接插入排序
// 时间复杂度:O(n) ~ O(n^2) public static void main(String[] args) {
// 声明整型数组
int[] array = new int[10];
// 使用循环和随机数初始化数组
for (int i = 0; i < array.length; i++) {
array[i] = (int) Math.round(Math.random() * 100);
}
System.out.println("原始数组为:");
for (int i : array) {
System.out.print(i + " ");
}
System.out.println();
System.out.println("排序后的数组为:");
array = shellSort(array);
for (int i : array) {
System.out.print(i + " ");
}
} /**
*
* 功能:冒泡排序的变种,希尔排序的基本思想是:首先按照一个序列递减的方法逐渐进行排序
*
* 参数:int[] array
*
* 返回类型:int[]
*/
public static int[] shellSort(int[] array) {
// 使用临时数组,替代原始数组
int[] arr = array;
// 以增量 i进行直接插入排序
int gap = arr.length;
// 临时变量
int j, temp;
do {
gap = gap / 2;
for (int i = gap; i < arr.length; i++) {
if (arr[i] < arr[i - gap]) {
temp = arr[i];
for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
arr[j + gap] = arr[j];
}
arr[j + gap] = temp;
}
}
} while (gap > 1); return arr;
}
}

运行结果:

希尔排序之Java实现的更多相关文章

  1. 程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现)

    http://blog.csdn.net/pzhtpf/article/details/7559896 程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大 ...

  2. 希尔排序(java实现)

    上篇blog中介绍的直接插入排序,希尔排序就是对直接插入排序的一个优化.比如有这么一种情况:对一个无序数组进行从小到大的排序,但是数组的最后一个位置的数是最小的,我们要把它挪到第一个位置,其他位置的都 ...

  3. 希尔排序算法Java实现

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

  4. 排序系列 之 希尔排序算法 —— Java实现

    基本思想: 希尔排序的实质就是分组插入排序,又称缩小增量法. 将整个无序序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本 ...

  5. 排序算法-希尔排序(Java)

    package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className ShellSort * @date 201 ...

  6. 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现

    这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...

  7. 【排序算法】希尔排序算法 Java实现

    希尔排序算法是按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布,是插入排序的一种更高效的改进版本. 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎 ...

  8. 排序算法入门之希尔排序(java实现)

    希尔排序是对插入排序的改进.插入排序是前面元素已经有序了,移动元素是一个一个一次往后移动,当插入的元素比前面排好序的所有元素都小时,则需要将前面所有元素都往后移动.希尔排序有了自己的增量,可以理解为插 ...

  9. 希尔排序(java)

    希尔排序是对直接插入排序的一种优化,基本思想是把待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入法排序:小组的个数逐次缩小:当完成了所有数据元素都在一个组内的排序后排序过程结束.希尔排 ...

随机推荐

  1. 2016.6.21——Climbing Stairs

    Climbing Stairs 本题收获: 1.斐波那契函数f(n) = f(n-1) + f(n -2) 题目: You are climbing a stair case. It takes n ...

  2. go 函数举例练习

    1. 求1到100之内的所有质数,并打印到屏幕上 package main import "fmt" // 求1-100 内的质数 func justfy(i int) bool ...

  3. ip_local_deliver && ip_local_deliver_finish

    当ip包收上来,查路由,发现是发往本地的数据包时,会调用ip_local_deliver函数: ip_local_deliver中对ip分片进行重组,经过LOCAL_IN钩子点,然后调用ip_loca ...

  4. SQL 存储过程分页

    CREATE PROC p_Team_GetTemaList @pageindex INT , @pagesize INT , @keywords VARCHAR(200) , --模糊查询 名称 标 ...

  5. Jenkins忘记用户名密码

    一.进入C盘.jenkins配置文件中找到config.xml 需要删除一下内容: <useSecurity>true</useSecurity> <authorizat ...

  6. 1->小规模集群架构规划

    "配置无人值守批量安装系统(Cobbler)" "搭建PPTP VPN/ NTP/Firewalld内部共享上网 " "搭建跳板机服务jumpserv ...

  7. gc overhead limit exceeded内存问题

    gc overhead limit exceeded 当出现这种问题的时候一般有两种思路 一.修改idea或者eclipse中的配置文件,将内存调到1024即可 二.在代码中通过system.gc 手 ...

  8. ggplot2使用初探

    ggplot2已经成为了R语言中数据可视化的同义词, 这是一个强大的工具, 可以帮助我们制作优良的图表, 创造出令人吃惊的图片, 下面我们一起学习(本博文参考了知乎问题如何使用 ggplot2中黄宝臣 ...

  9. node项目中用到的一些模块

    1.http模块,用来搭建服务器 代码,简单服务器实现 var http = require('http'); http.createServer(function (request, respons ...

  10. 3.Springboot之修改启动时的默认图案Banner

    一.SpringBoot的默认启动图案 在SpringBoot启动的时候,默认的会展示出一个spring的logo,这个图案我们用户是可以自定义的 二.自定义启动图案 方法一: Application ...