排序---希尔排序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.什么是冒泡排序:原理是临近的两个数比较大小,将较大的数往后移,这样遍历一趟数组以后,最大的数就排在的最后面(时间 ...
随机推荐
- Thymeleaf前后端分页查询
分页查询是一个很常见的功能,对于分页也有很多封装好的轮子供我们使用. 比如使用mybatis做后端分页可以用Pagehelper这个插件,如果使用SpringDataJPA更方便,直接就内置的分页查询 ...
- Java自学-数组 创建数组
Java 如何创建一个数组 数组是一个固定长度的,包含了相同类型数据的 容器 步骤 1 : 声明数组 int[] a; 声明了一个数组变量. []表示该变量是一个数组 int 表示数组里的每一个元素都 ...
- Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量
Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量 一丶线程的理论知识 什么是线程: 1.线程是一堆指令,是操作系统调度 ...
- 关于AWK的10个经典案例
awk是Linux系统下一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及生成报表等等,应用非常广泛.基本的命令语法:awk option 'pattern {actio ...
- Linux系统:保证数据安全落盘
在很多IO场景中,我们经常需要确保数据已经安全的写到磁盘上,以便在系统宕机重启之后还能读到这些数据.但是我们都知道,linux系统的IO路径还是很复杂的,分为很多层,每一层都可能会有buffer来加速 ...
- JavaScript之原型、函数、实例
JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用了关键词 function: function functionname() { // 执行代码 } 当调用该函数时,会执 ...
- 77.JS本地保存数据的几种方法
1.Cookie 这个恐怕是最常见也是用得最多的技术了,也是比较古老的技术了.COOKIE优点很多,使用起来很方便 但它的缺点也很多: 比如跨域访问问题:无法保存太大的数据(最大仅为4KB):本地保存 ...
- 报错:failed to get the task for process XXX(解决方案)
引文: iOS真机调试程序,报如下错误信息: 原因: 证书问题,project和targets的证书都必须是开发证书,ADHOC的证书会出现此问题. 解决方案: project和targets的证书使 ...
- 【故障解决】ORA-06502错误解决
[故障解决]ORA-06502: PL/SQL: numeric or value error: character string buffer too small 一.1 BLOG文档结构图 ...
- 改变默认的多选框 checkbox 样式~
效果图: HTML代码: <label for="Checkbox1" style="display:none;"></label> & ...