排序---希尔排序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.什么是冒泡排序:原理是临近的两个数比较大小,将较大的数往后移,这样遍历一趟数组以后,最大的数就排在的最后面(时间 ...
随机推荐
- 常用正则表达式和一些demo
一.校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ ...
- python小作业
目录 1.简述变量命名规范 2.name = input(">>>") name变量是什么数据类型通过代码检测 3.if条件语句的基本结构? 4.用print打印 ...
- pandas-11 TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely错误解决方法
pandas-11 TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be sa ...
- 2.在HTML中使用JavaScript
目录 1. script元素 2. 标签的位置 3.延迟和异步加载 4.嵌入代码与外部代码的区别 5.noscript元素 6. 小结 1. script元素 向HTML中插入JavaScript的主 ...
- Linux crontab命令参数和时间格式说明
crontab 是用来让使用者在固定时间或固定间隔执行程序之用 参数说明 选项 功能 -e 编辑crontab定时任务 -l 查询crontab任务 -r 删除当前用户所有的crontab任务 时间格 ...
- 业余时间折腾了个微信小程序版本的街机游戏模拟器(吾爱街机),8090后的童年回忆,欢迎大家体验
好多年没来博客园了,有段时间想玩街机游戏,发现都需要下载安装,现在小程序这么流行,是不是可以集成到小程序里(无需下载,在线玩),出于这想法,就业余时间折腾了下,分享给大家,偶尔可以回味畅玩下. 中间遇 ...
- rhce 考试题目总结
rhce 考试题目总结归类 开机需要做的事: 检查系统版本 配置yum源 修改selinux的模式 ping一下server机器 1.分区类题目 1.1 rhcsa 第十五题 添加swap分区 要点: ...
- 使用Xpath+多进程爬取诗词名句网的史书典籍类所有文章。update~
上次写了爬取这个网站的程序,有一些地方不完善,而且爬取速度较慢,今天完善一下并开启多进程爬取,速度就像坐火箭.. # 需要的库 from lxml import etree import reques ...
- 有意义的单词分割——经典dfs题目
680. 分割字符串 中文 English 给一个字符串,你可以选择在一个字符或两个相邻字符之后拆分字符串,使字符串由仅一个字符或两个字符组成,输出所有可能的结果 样例 样例1 输入: "1 ...
- 类型擦除对Java调用Kotlin的影响
@JvmName: 扩展方法相关: 先来定义一个扩展方法: 好,接下来再来定义一个扩展函数: 此时报错了..看一下错误提示: 其中给的提示有点奇怪,第一个是很明显咱们的扩展函数木有接收参数嘛,为啥提示 ...