希尔排序之Java实现
希尔排序之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实现的更多相关文章
- 程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现)
http://blog.csdn.net/pzhtpf/article/details/7559896 程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大 ...
- 希尔排序(java实现)
上篇blog中介绍的直接插入排序,希尔排序就是对直接插入排序的一个优化.比如有这么一种情况:对一个无序数组进行从小到大的排序,但是数组的最后一个位置的数是最小的,我们要把它挪到第一个位置,其他位置的都 ...
- 希尔排序算法Java实现
希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它的基本思想是: ...
- 排序系列 之 希尔排序算法 —— Java实现
基本思想: 希尔排序的实质就是分组插入排序,又称缩小增量法. 将整个无序序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本 ...
- 排序算法-希尔排序(Java)
package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className ShellSort * @date 201 ...
- 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...
- 【排序算法】希尔排序算法 Java实现
希尔排序算法是按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布,是插入排序的一种更高效的改进版本. 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎 ...
- 排序算法入门之希尔排序(java实现)
希尔排序是对插入排序的改进.插入排序是前面元素已经有序了,移动元素是一个一个一次往后移动,当插入的元素比前面排好序的所有元素都小时,则需要将前面所有元素都往后移动.希尔排序有了自己的增量,可以理解为插 ...
- 希尔排序(java)
希尔排序是对直接插入排序的一种优化,基本思想是把待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入法排序:小组的个数逐次缩小:当完成了所有数据元素都在一个组内的排序后排序过程结束.希尔排 ...
随机推荐
- 下拉框 select
1.select 用来做什么? select 用于实现下来下拉列表,其 html 结构是这样的: <select name="city" id="city" ...
- 使用 TypeScript 改造构建工具及测试用例
最近的一段时间一直在搞TypeScript,一个巨硬出品.赋予JavaScript语言静态类型和编译的语言. 第一个完全使用TypeScript重构的纯Node.js项目已经上线并稳定运行了. 第二个 ...
- Servlet笔记4--ServletConfig接口和ServletContext接口
ServletConfig接口: ServletContext接口: 代码详解: (1)web.xml配置文件: <?xml version="1.0" encoding=& ...
- Imperva正则表达式的添加以及使用
Imperva正则表达式的添加以及使用 1.添加字典 创建策略 模拟访问产生告警
- 13-6_mysql索引_1_Mysql_Learning_Notes_20180719_13-6
mysql索引_1_Mysql_Learning_Notes 二分查找/折半查找法,binary search 一种在有序数组中查找某一特定元素的搜索算法; 二分查找法的优点是比较少次数,查找速度快, ...
- Linux修改主机名【转】
一.永久修改修改/etc/sysconfig/network,在里面指定主机名称HOSTNAME=然后执行命令hostname 主机名这个时候可以注销一下系统,再重登录之后就行了. 或者修改/etc/ ...
- 将python脚本转换成exe文件--pyinstaller
遇到的大坑: 直接运行python文件效果: 执行 pyinstaller -F -w -p -i ./123.ico ./main.py 在dict文件夹下生成exe文 ...
- Python爬虫学习1: Requests模块的使用
Requests函数库是学习Python爬虫必备之一, 能够帮助我们方便地爬取. Requests: 让HTTP服务人类. 本文主要参考了其官方文档. Requests具有完备的中英文文档, 能完全满 ...
- No.10 selenium学习之路之通过元素定位获取属性
1. implicitly_wait()隐形等待.等待页面加载完成,作用是全局的. 时间可以设置的长,短时间也没有影响.直到设置的时间耗完 时间耗完也不会报错 2.获取title值 driver.ti ...
- MySQL学习笔记:delete from与truncate table的区别
在Mysql数据库的使用过程中,删除表数据可以通过以下2种方式: delete from table_name truncate table table_name (1)delete from语句可以 ...