希尔排序之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)
希尔排序是对直接插入排序的一种优化,基本思想是把待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入法排序:小组的个数逐次缩小:当完成了所有数据元素都在一个组内的排序后排序过程结束.希尔排 ...
随机推荐
- vue dev开发环境跨域和build生产环境跨域问题解决
dev开发时解决请求跨域问题:config-index.js 配置代理dev: { env: require('./dev.env'), port: 8082, assetsSubDirectory: ...
- 无需登录-悟空CRM 存储型XSS
无需登录-悟空CRM 存储型XSS 审计悟空的缘由是看见某云爆出CRM的getshell,于是就想着去挖出来瞅瞅!但可能自己把自己给局限了,就想着去挖那些无限制访问的文件. 故事的发生点 漏洞文件:/ ...
- JSON数据生成树——(四)
1.页面中准备树的div <div class="user_left_tree_info"> <div class="user_left_tree_in ...
- gcc 编译 + 选项【转】
转自:http://blog.csdn.net/princess9/article/details/6567678 一般来说要现有项目中的编译选项,设置新的project的编译选项 编译器 就是将“高 ...
- javascript按照指定格式获取上一个月的日期
//get pre month//get pre month function getPreMonth() { var date=new Date().Format("yyyy-MM-dd& ...
- 解决修改表结构,添加外键时出现“约束冲突”的错误
由于表结构更改,使用新建表,现有部分表需要更改外键,将引用更改到新建表的相应字段.在更改过程中,部分表出现如下错误提示: ALTER TABLE 语句与 COLUMN FOREIGN KEY 约束 ' ...
- 2015 Dhaka
2015 Dhaka A - Automatic Cheater Detection solution 模拟计数. B - Counting Weekend Days solution 模拟计数. C ...
- structc 开源框架介绍
引言 - 一切才刚刚开始 structc 是 C 结构基础库. 简单可复用. structc - https://github.com/wangzhione/structc 之前也描述过几次 stru ...
- HTML 多张图片无缝连接
<table border="0" cellspacing="0" cellpadding="0" style="heigh ...
- 最后一面《HR面》------十大经典提问
1.HR:你希望通过这份工作获得什么? 1).自杀式回答:我希望自己为之工作的企业能够重视质量,而且会给做得好的员工予以奖励.我希望通过这份工作锻炼自己,提升自己的能力,能让公司更加重视我. a.“我 ...