排序---希尔排序Java
-
希尔排序
import java.util.Scanner;
public class XierPaixu {
public static void main(String[] args) {
/**
* 键盘输入数组
*/
int[] a = null;
System.out.println("请输入数组长度:");
Scanner sc = new Scanner(System.in);
int len = 0;
try {
len = Integer.parseInt(sc.nextLine());
} catch (Exception e) {
}
a = new int[len];
System.out.println("请输入数组:");
for(int i=0;i<a.length;i++) {
a[i]=sc.nextInt();
}
System.out.println("原数组为:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
/**
* 选择升序或降序
*/
System.out.println(" ");
System.out.println("升序请按1;降序请按2");
Scanner s = new Scanner(System.in);
int b = 0;
try {
b = Integer.parseInt(s.nextLine());
} catch (Exception e) {
}
switch (b){
case 1:
xierAsc(a);
break;
case 2:
xierDesc(a);
break;
case 0:
System.out.println("请选择1或2!");
break;
}
}
public static void xierAsc(int arr[]) {
/**
* 希尔排序---升序
*/
int len= arr.length;
for(int d=len/2; d>=1; d=d/2){//选择增量d1=len/2,d2=d1/2...最后增量为1
for(int i=d; i<len; i++){ //从第d+1个元素,逐个对其所在组进行直接插入排序操作
for(int j=i-d; j>=0; j=j-d){
if(arr[j] > arr[j + d]) {//符合条件交换位置
swap(arr,j,j+d);//j+d 代表即将插入的元素所在的角标
}
}
}
System.out.println("增量为"+d+"时的排序结果:");
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println(" ");
}
}
public static void swap(int[] arr, int a, int b) { //交换
int t = arr[a];
arr[a] = arr[b];
arr[b] = t;
}
public static void xierDesc(int arr[]) {
/**
* 希尔排序---降序
*/
int len= arr.length;
if(arr == null || arr.length == 0) { //判断数组是否为空
System.out.println("该数组为空!");
return;
}
for(int d=len/2; d>0; d=d/2){//选择增量d1=len/2,d2=d1/2...最后增量为1
for(int i=d; i<len; i++){//从第d+1个元素,逐个对其所在组进行直接插入排序操作
for(int j=i-d; j>=0; j=j-d){
if(arr[j] < arr[j + d]) {//符合条件交换位置
swap(arr,j,j+d);//j+d 代表即将插入的元素所在的角标
}
}
}
System.out.println("增量为"+d+"时的排序结果:");
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println(" ");
}
}
}
运行截图:


排序---希尔排序Java的更多相关文章
- C语言实现 冒泡排序 选择排序 希尔排序
// 冒泡排序 // 选择排序 // 希尔排序 // 快速排序 // 递归排序 // 堆排序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h& ...
- Java数据结构之排序---希尔排序
希尔排序的基本介绍: 希尔排序同之前的插入排序一样,它也是一种插入排序,只不过它是简单插入排序之后的一个优化的排序算法,希尔排序也被称为缩小增量排序. 希尔排序的基本思想: 希尔排序是把数组中给定的元 ...
- 排序 —— 希尔排序(Shell sort)
希尔排序(Shell sort)的名称源于它的发明者 Donald Shell,该算法是冲破二次时间屏障(冒泡和插入排序,基于相邻元素的交换)的第一批算法.希尔排序改进了冒泡和插入排序的相邻元素才进行 ...
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...
- 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...
- 希尔排序和归并排序(java实现)
希尔排序 希尔排序算法实际上是一种特殊的插入排序,由DL.Shell于1959年提出而得名. 算法思想:希尔排序使数组中任意间隔为h的元素都是有序的,这些数组称为h有序数组,对于每个h,按插入排序进行 ...
- 常见的排序算法之Java代码解释
一 简要介绍 一般排序均值的是将一个已经无序的序列数据重新排列成有序的 常见的排序分为: 1 插入类排序 主要就是对于一个已经有序的序列中,插入一个新的记录.它包括:直接插入排序,折半插入排序和希尔排 ...
- 7种基本排序算法的Java实现
7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 /** * 直接插 ...
- Java排序之排序大综合
一.最近写了一些排序,于是和和大家分享一下:(默认都是从小到大排序) 二.冒泡排序 1.什么是冒泡排序:原理是临近的两个数比较大小,将较大的数往后移,这样遍历一趟数组以后,最大的数就排在的最后面(时间 ...
随机推荐
- Java自学-类和对象 继承
什么是 Java的 继承 ? 在LOL中,武器是物品的一种,也是有名称和价格的 所以在设计类的时候,可以让武器继承物品,从而继承名称和价格属性 步骤 1 : 物品类Item 物品类Item 有属性 n ...
- 连续子数组的最大乘积及连续子数组的最大和(Java)
1. 子数组的最大和 输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.例如数组:arr[]={1, 2, 3, -2, ...
- Java知识回顾 (17)MySQL链接
本部分介绍如何使用JDBC 连接 MySQL 数据库. 驱动包下载 Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connec ...
- 解决SqlDataSource连接超时的问题
采用两种策略: 1.连接字符串增加Connect Timeout=1000(大约1000秒/60=16分钟) 2.设置SqlDataSourced 的 EnableCaching="True ...
- 美国LangeEylandt长岛
LangeEylandt n.长岛(美国) 纽约长岛 纽约长岛 (LongIsland)是北美洲在大西洋内的一个岛,最早追溯到十七世纪的1650年被命名为Lange Eylandt [1] ,位于北美 ...
- 10分钟学会js处理json常用方法
一.json定义 JSON ( JavaScript Object Notation) ,它是一串字符串 只不过元素会使用特定的符号标注. {} 双括号表示对象 [] 中括号表示数组 "&q ...
- windows安装redis服务
下载地址: https://github.com/microsoftarchive/redis/releases 解压. git执行:
- 接口测试 dubbo 接口测试技术
本文转自测试之家 https://testerhome.com/topics/10481 dubbo是阿里巴巴开源的一套rpc方案,以为理念很契合微服务,这几年很火,用户里面不凡京东,当当,去哪儿等大 ...
- 关于 ES5 & ES6 数组遍历的方法
ES5 数组遍历方法 1.for 循环 , , , , ] ; i < arr.length; i++) { console.log(arr[i]) } 2.forEach , , , , ] ...
- Python的logging模块基本用法
Python 的 logging 模块的简单用法 在服务器部署时,往往都是在后台运行.当程序发生特定的错误时,我希望能够在日志中查询.因此这里熟悉以下 logging 模块的用法. logging 模 ...