将数据区分为成待定间隔的几个小区块,以插入排序法排完区块内的数据后在渐渐减少间隔的距离。

交换法:

package paixu;import java.util.Arrays;//   希尔排序
public class shellSort {public static void main(String[] args) {int[] arr = {8,9,1,3,2,7,5,4,6,0};//    shell(arr);shellAll(arr);}//  分步骤便于理解public static void shell(int[] arr){//因为排序分成5组int temp = 0;for (int i = 5; i < arr.length; i++) {//遍历各组中所有的元素,共5组,步长5for (int j = i - 5; j >=0; j-=5) {   //j-=5  始终保持j为负数,跳出j的循环(j<0退出循环),这样在进行一次排序后就可以进入下一轮if (arr[j]>arr[j+5]){temp = arr[j];arr[j] = arr[j+5];arr[j+5] = temp;}}}}//完整希尔排序public static void shellAll(int[] arr){int temp = 0;for (int gap = arr.length; gap > 0; gap /= 2) {//因为排序分成gap组for (int i = gap; i < arr.length; i++) {//遍历各组中所有的元素,共gap组,步长gapfor (int j = i - gap; j >=0; j-=gap) {   //j-=gap  始终保持j为负数,跳出j的循环(j<0退出循环),这样在进行一次排序后就可以进入下一轮if (arr[j]>arr[j+gap]){temp = arr[j];arr[j] = arr[j+gap];arr[j+gap] = temp;}}}}System.out.println("完整排序后:"+ Arrays.toString(arr));}
}

插入法:

public static void shell1(int[] arr){for (int gap = arr.length/2; gap > 0; gap /= 2) {//从第gap开始,逐个对其所在的组进行插入排序for (int i = gap; i < arr.length; i++) {int j = i;int temp = arr[j];if (arr[j]<arr[j-gap]){while (j-gap >= 0 && temp < arr[j-gap]){arr[j] = arr[j-gap];j-=gap;}arr[j] = temp;}}}System.out.println(Arrays.toString(arr));}

排序-希尔排序-java相关推荐

  1. 【数据结构-排序】1. 图解插入排序三种实现(插入排序/折半排序/希尔排序)

    直接插入排序(插入排序) 排序思想 对于一个数组 A[0,n] 的排序问题,假设认为数组在 A[0,n-1] 排序的问题已经解决了. 考虑 A[n] 的值,从右向左扫描有序数组 A[0,n-1] ,直 ...

  2. 算法---排序--希尔排序和快速排序

    冒泡.选择.插入排序算法是三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间则是我们所不能接受的.接着我们在讲解递 ...

  3. 排序---希尔排序实现和性能分析

    希尔排序 希尔排序是简单插入排序的改进,直接插入排序的最坏情况时间复杂度达到O(n^2),比如从大到小的一串数字654321,使用插入排序从小到大进行排序,这就达到插入排序的最坏情况. 希尔排序是把记 ...

  4. 数据结构之内部排序--希尔排序

    概要 -IDE:Pycharm -Python版本:python3.x -算法分类:内部排序->插入类排序->希尔排序 算法思想 希尔排序又称缩小增量排序法,是一种基于插入思想的排序方法. ...

  5. 【每天学一点 - 算法篇 - 排序 - 希尔排序】

    系列文章目录 [每天学一点 - 算法篇 - 排序 - 插入排序] 文章目录 系列文章目录 前言 一.什么是希尔排序 二.原理 1.思路 2.示例 3.抽象 三.代码 四.复杂度 总结 前言 小时候听蛋 ...

  6. 数据结构 排序 java_Java数据结构之排序---希尔排序

    希尔排序的基本介绍: 希尔排序同之前的插入排序一样,它也是一种插入排序,只不过它是简单插入排序之后的一个优化的排序算法,希尔排序也被称为缩小增量排序. 希尔排序的基本思想: 希尔排序是把数组中给定的元 ...

  7. ds排序--希尔排序_图解直接插入排序和希尔排序

    前言 这次我们介绍插入类排序中的 直接插入排序 和 希尔排序 . 对于直接插入排序,虽然它的时间复杂度也是 O(n^2) ,但是在元素 有序或近乎有序 的情况下,时间复杂度可以降为 O(n) ,效率比 ...

  8. 理论基础 —— 排序 —— 希尔排序

    [概述] 希尔排序是一种不稳定的排序方法,其是对直接插入排序的改进. 直接排序再基本本身基本有序时,只需要少量的插入操作,即可完成整个记录的排序工作,所谓基本有序,就是小的关键字基本在前,大的关键字基 ...

  9. ds排序--希尔排序_排序算法 - 希尔排序分析及优化

    希尔排序 1 算法思想 希尔排序,也被称为递减增量排序,是简单插入排序的一种改进版本. 在插入排序中,如果待排序列中的某个元素,距离有序数列中待插入位置非常远,就需要比较很多次才可以到达插入位置,这是 ...

最新文章

  1. Dropout, DropConnect ——一个对输出,一个对输入
  2. 华为的深度学习平台:ModelArts
  3. 最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法
  4. Python基础之基本数据类型的总结
  5. Anaconda更新源失败
  6. ios did receive memory warning
  7. C++ 面向对象(三)—— 类之间的关系
  8. design php 如何使用ant_Ant Design Pro如何调用接口 | Ant Design Pro渲染数据 绑定数据...
  9. 在无法单步调试的情况下找Bug的技巧
  10. linux下内存调试工具——valgrind
  11. 15个代理IP网站,打造免费代理IP池
  12. 量化交易让股市成为你的印钞机
  13. 无线手柄在ROS上的使用
  14. one 主格 复数 宾格_数字 主格宾格复数所有格
  15. 2004年下半年 网络工程师 上下午试卷【附带答案】
  16. 【SpringBoot进阶】阿里云短信发送配置
  17. 选择一款对的固定资产管理系统让固定资产管理轻松无比
  18. pyecharts js 地图无法显示 Map china not exists the geoJson of the map must be provided
  19. Linux查看系统基本信息
  20. 简单介绍API分类接口

热门文章

  1. 厉害|百度28位离职技术大牛和他们创建的AI公司!
  2. s4 android4.4.2,三星Galaxy S4(GT-I9500)开始Android 4.4.2升级
  3. Linux下C语言 对pow、exp未定义引用问题
  4. mysql数据字段属性
  5. Google退出中国损失的不止是搜索机会
  6. 数据结构——有序链表的合并,链表实现一元多项式相加
  7. GitLab CI Pipeline
  8. 正则表达式替换字符串中的${}里面的数据
  9. 极速进阶,小i智慧学堂联合复旦大学教授推出人工智能冬令营
  10. 软件开发项目 质量管理的6大关键事项