import java.util.Arrays;public class TestDemo{/*直接插入排序*/public static void insertSort(int[] arr){for(int i=1; i<arr.length;i++){//从1号下标开始插入int tmp=arr[i];//将插入的i下标的数据保存int j=i-1;//j是i的前一位的数据,主要是将tmp和前面的进行比较。for(;j>=0;j--){if(tmp<arr[j]){arr[j+1]=arr[j];//当插入的数据比前面的数据小的时候就将后面的数据向前挪。}else{break;//插入的数据比前面的数据大的话就直接跳出循环即可,因为是从小到大的排序所以就直接放在当前的i下标位置即可}}arr[j+1]=tmp;//走出一个循环即找到了tmp应该放的位置,因为出来的j 要么是break出来的那么就是tmp比当前的j位置大所以就放在j+1位置就好了//还有一种就是j小于0了跳出的循环,那么就放在最0下标即可。}}public static void main(String[] args) {int[] arr={34,45,12,19,98,67,445,200};insertSort(arr);System.out.println(Arrays.toString(arr));}
}

直接插入排序:

时间复杂度:O(N^2);空间复杂度:O(1);

稳定性:稳定

直接插入排序越接近有序则算法的时间效率越高。

希尔排序:

 public static void shellSort(int[] arr,int gap){for(int i=gap;i<arr.length;i++){int tmp=arr[i];int j=i-gap;for(;j>=0;j--){if(tmp<arr[j]){arr[j+gap]=arr[j];}else {break;}}arr[j+gap]=tmp;}}public static void main(String[] args) {int[] arr={34,45,12,19,98,67,445,200};int gap=arr.length;//定义一个gap变量,数组每隔gap取一次值经行分组,从而分别排序while(gap>1){gap=gap/2;shellSort(arr,gap);}shellSort(arr,1);//当gap为1就是直接插入排序System.out.println(Arrays.toString(arr));}

时间复杂度:说法不一,主要和gap的取值有关

空间复杂度:O(1);

希尔排序是直接插入排序的优化

java实现插入排序和希尔排序相关推荐

  1. 【Java】插入排序、希尔排序详解

    文章目录 1️⃣必备排序常识 2️⃣插入排序 1.直接插入排序 2.优化后的插入排序 3.折半插入排序 4.性能比较 3️⃣希尔排序 性能比较 1️⃣必备排序常识 稳定性:在原序列中,r[i]=r[j ...

  2. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

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

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

  4. java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序

    好吧 ~~csdn太难用了....尼玛...写了半天的也无法弄进去...lz正在找更好地博客,or放在github上打算.. 下边是lz自己的有道云分享,大概内容是 http://note.youda ...

  5. Java中的插入排序和希尔排序

    插入排序&&希尔排序 插入排序 希尔排序 上一篇博客我给大家伙说了一下子堆排序,之所以我把插入排序和希尔排序放在一起呢,是因为希尔排序实际上用到了插入排序的思想,希望下面的内容能够帮助 ...

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

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

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

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

  8. 排序算法(分类,时间复杂度)(快速排序,插入排序,希尔排序,选择排序,冒泡排序)

    1.排序算法 1.排序的分类 分为内部排序和外部排序,其中内部排序分为插入排序.选择排序.交换排序.归并排序和基数排序.插入排序包括直接插入排序和希尔排序:选择排序包括简单选择排序和堆排序:交换排序包 ...

  9. 希尔排序java写法_Java实现希尔排序

    华杰让我看了一道面试题:现有一段程序S,可以对任意n个数进行排序.如果现在需要对n^2个数进行排序,最少需要调用S多少次?(只允许调用S,不可以做别的操作). 看到了这个,我想试试希尔排序,就学学. ...

最新文章

  1. count(*)效率提高_想使用多线程来提高处理速度,却还不知道使用CountDownLatch与CyclicBarries?...
  2. 高等数学-微分方程知识点
  3. java数据类型怎样理解_深入理解Java之数据类型
  4. python数量推荐_太香了,墙裂推荐3个Python数据分析EDA神器!
  5. 我的软件用了那些技术
  6. 多目标进化优化(MOEA)方法
  7. 机器学习基础(五十四)—— 支持向量机(SVM)
  8. (转)倒卖火车票的惊人黑幕全过程
  9. css横向排列_前端初学者李不白,html+css的角度,带你分析蘑菇街官网!!!
  10. GUI开发和JDBC编程实现员工管理
  11. cryptoJs 前端用法
  12. 破解隔壁wifi的实践——网络攻击,抓取握手包,解包
  13. NES专题——一块带给无数人年少欢乐的CPU(6502)
  14. 市场调研—2021-2027全球与中国肌酸激酶试剂市场现状及未来发展趋势
  15. 计算机启动相机代码,如何在win7系统中启动相机
  16. [ArcGIS] 空间分析(四) 三维分析
  17. iOS开发-Tom猫
  18. 超声波传感器(CHx01) 学习笔记 Ⅲ-API介绍
  19. 心得三、做事先做人(转载)
  20. skywalking源码分析第十八篇一agent端Trace三部曲一Span栈桢机制

热门文章

  1. 选C++还是选Java,过来人给你一个建议
  2. BAMBOOROSY编舞,灵感来自THE SEA【大型圣诞狂欢派对系列宣传】
  3. 如何理解一台服务器可以绑定多个ip,一个ip可以绑定多个域名
  4. 为什么那么多的人选择到Java培训机构学习
  5. 水瓶的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  6. 基于收货的发票校验(功能)
  7. *PAT_甲级_1072 Gas Station (30point(s)) (C++)【Dijkstra/字符串截取/与数字相互转换】
  8. JButton部分常用的方法
  9. 华南理工计算机电路基础试题,2017年华南理工大学计算机电路基础
  10. MySQL slave相关参数