1. 插入排序

插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素, 把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

代码演示

package com.zh.data_structures.sort;import java.util.Arrays;public class InsertSort {//插入排序,将第一个数和其他数分为一个有序表和无序表,每一次从无序表中插入一个元素到有序表public static void main(String[] args) {int arr[] ={5,1,4,3,7};System.out.println("排序前");System.out.println(Arrays.toString(arr));insertSort(arr);System.out.println("排序后");System.out.println(Arrays.toString(arr));}public static void insertSort(int[] arr){//插入元素值int insertVal = 0;//插入元素前一个的下标int insertIndex = 0;for (int i = 1; i <arr.length ; i++) {//保存插入元素值insertVal = arr[i];insertIndex = i - 1;//当下标未越界,且插入值小于插入元素前一个的值(有序表中)时,将arr[insertIndex]后移while (insertIndex >= 0 && insertVal < arr[insertIndex]){arr[insertIndex+1] = arr[insertIndex];insertIndex --;}//当退出while循环时,说明插入位置找到,insertIndex+1if (insertIndex+1!=i){//判断是否需要赋值//insertIndex+1就是插入元素的下标arr[insertIndex+1] = insertVal;}System.out.println("第"+i+"轮排序结果为"+Arrays.toString(arr));}}
}

2. 希尔排序

插入排序存在一定的问题,当需要插入的元素较小时,后移的次数明显增多,对效率有影响。希尔排序解决了这个问题。

基本思想
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组, 算法便终止。

代码实现

package com.zh.data_structures.sort;import java.util.Arrays;public class ShellSort {public static void main(String[] args) {int[] arr = {8,9,1,7,2,3,5,4,6,0};System.out.println("排序前");System.out.println(Arrays.toString(arr));shellSort(arr);System.out.println("排序后");System.out.println(Arrays.toString(arr));}//交换法public static void shellSort(int[] arr){//计数int count = 0;//增量gap,并逐步的缩小增量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 (temp < arr[j-gap]) {//如果当前元素小于对应位置元素,则移动while (j - gap >= 0 && temp < arr[j - gap]) {//移动arr[j] = arr[j - gap];j -= gap;}//当退出while循环时,就给temp找到了插入的位置arr[j] = temp;}}System.out.println("第"+(++count)+"轮排序结果为"+Arrays.toString(arr));}}}

(数据结构与算法)插入排序和希尔排序相关推荐

  1. 数据结构:从插入排序到希尔排序

    数据结构:从插入排序到希尔排序 插入排序 算法思路 每次从无序表中取出第一个元素,将其插入到有序表中的适当位置,使有序表的长度不断加长,完成排序过程. n个待排序的元素由一个有序表和一个无序表组成,开 ...

  2. Hark的数据结构与算法练习之希尔排序

    算法说明 希尔排序是插入排序的优化版. 插入排序的最坏时间复杂度是O(n2),但如果要排序的数组是一个几乎有序的数列,那么会降低有效的减低时间复杂度. 希尔排序的目的就是通过一个increment(增 ...

  3. 插入排序,希尔排序,堆排序

    本文将介绍三种排序算法--插入排序,希尔排序,堆排序.本文所有例子都是使用升序 一.插入排序 算法思想 维护一个有序数组,将要插入的数据与有序数组自最后一个元素直到合适位置的数一一比较. eg: 有序 ...

  4. 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)

    *排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...

  5. 【Java数据结构与算法】第七章 冒泡排序、选择排序、插入排序和希尔排序

    第七章 冒泡排序.选择排序.插入排序和希尔排序 文章目录 第七章 冒泡排序.选择排序.插入排序和希尔排序 一.冒泡排序 1.基本介绍 2.代码实现 二.选择排序 1.基本介绍 2.代码实现 三.插入排 ...

  6. 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)...

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/20043459   前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃 ...

  7. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  8. 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)

    本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...

  9. 数据结构例程——插入排序之希尔排序

    本文是[数据结构基础系列(9):排序]中第3课时[插入排序之希尔排序]的例程. 1.希尔排序 #include <stdio.h> #define MaxSize 20 typedef i ...

  10. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

最新文章

  1. input 的id 和name什么区别
  2. hibernate开发优缺点
  3. KVYcam(网络摄像头软件) v13.0.3.0
  4. SCI期刊分区/期刊名词,看完秒懂~
  5. STS下载教程(include官网无法下载解决方案)
  6. oracle database link
  7. 吉比特2021秋招数据分析笔试
  8. python axes3d函数_python3D绘图Axes3D函数详解
  9. 阿维塔6000+交付量再创新高,持续聚焦“悦己”诉求
  10. v-loam源码阅读(一)视觉特征
  11. orbot android教程,Android Orbot malformed reply from SOCKS server
  12. 输出1-100之内的所有质数
  13. Mac免费的解压缩神器:The Unarchiver for Mac
  14. Flutter 小技巧之玩转字体渲染和问题修复
  15. uboot menuconfig详解
  16. 转换器(Converter)Struts 2.0中的魔术师
  17. 清华大学智班首席教授姚期智:求解人工智能的中国答案
  18. Acrobat PDF三大插件:Quite Imposing plus (或称QI)、PitStop、PDF Toolbox
  19. Uncaught SyntaxError: Invalid shorthand property initialize
  20. 计算机排位函数升序是0还是1,Excel Rank函数怎么用的11个实例,含与Rank.EQ和Rank.AVG的区别、并顺自动排序和排名次及分段排序...

热门文章

  1. buu [BJDCTF 2nd]rsa1
  2. buu [AFCTF2018]Morse
  3. 【django】自定义中间件
  4. 2021-09-15
  5. 拜占庭将军问题与中本聪
  6. JVM字节码指令集大全及其介绍
  7. 2020-11-10(回传递过程)
  8. MySQL DISTINCT:去重(过滤重复数据)
  9. 8、使用元数据(描述数据属性的信息)分析数据库
  10. ==与equals,String的equals()方法