:插入排序

  • 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法  。
  • 插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。
  • 其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。 

图片链接https://www.runoob.com/wp-content/uploads/2019/03/insertionSort.gif

package com.atguigu.sort;import java.text.SimpleDateFormat;
import java.time.Clock;
import java.util.Arrays;
import java.util.Date;public class InsertSort {public static void main(String[] args) {int[] arr = { 101, 34, 119, 1, 58, 60, 59,-1 };// { 101, 34, 119, 1}第一轮 {34,101, 119, 1}System.out.println("排序前:\n" + Arrays.toString(arr));insertSort(arr);System.out.println("排序后:\n" + Arrays.toString(arr));timeSort();}// 插入排序public static void insertSort(int[] arr) {for (int i = 1; i < arr.length; i++) {// 定义待插入的数字int insertVal = arr[i];int insertIndex = i - 1;// insertIndex 即 arr【i】前面数的下标/** 给insertVal 找到插入的位置 说明 1.insertIndex 》= 0,保证不越界 2.insertVal <arr[insertIndex]* 表示待插入的数还没找到位置 3.将arr[insetIndex]后移*/while (insertIndex >= 0 && insertVal < arr[insertIndex]) {arr[insertIndex + 1] = arr[insertIndex];insertIndex--;}// 当退出while循环,表示插入的位置找到,insertIndex + 1//判断是否需要赋值if(insertIndex + 1 != i) {arr[insertIndex + 1] = insertVal;}System.out.println("第" + (i ) + "轮插入排序后~~"+", 目前有序数组内前"+(i+1)+"个元素已排好序");System.out.println(Arrays.toString(arr));}}// 耗时测试public static void timeSort() {// 测试排序的速度(O(n^2)),给80000个数据// 创建一个80000个随机数的数组int[] arr = new int[80000];for (int i = 0; i < 80000; i++) {arr[i] = (int) (Math.random() * 8000000);// 生成一个【0,8000000】数}//获取排序前时间long s = Clock.systemDefaultZone().millis();insertSort(arr);//打印总耗时间System.out.println("八万个随机数据【插入排序】耗时: " + (Clock.systemDefaultZone().millis() - s) + " ms");}}

尚硅谷数据结构与算法(Java)--14--插入排序相关推荐

  1. 尚硅谷数据结构与算法(Java)--17--归并排序

    :归并排序 归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 将已有序的子序列合并,得到完全有序的序列:即先使每个 ...

  2. 【自学笔记】尚硅谷数据结构与算法Chapter 1 数据结构与算法概述

    Chapter 1 数据结构与算法概述 文章目录 Chapter 1 数据结构与算法概述 1.1.1 数据结构和算法的关系 1.2.1 线性结构 1.2.2 非线性结构 尚硅谷数据结构B站学习视频地址 ...

  3. 【自学笔记】尚硅谷数据结构与算法Chapter 4 栈

    Chapter 4 栈 文章目录 Chapter 4 栈 4.1 栈 4.1.1 栈的介绍 4.1.2 数组模拟栈 4.1.3 练习:用链表模拟栈 4.1.4 例题:用栈完成表达式计算(中缀表达式) ...

  4. 【自学笔记】尚硅谷数据结构与算法Chapter 3 链表

    Chapter 3 链表 文章目录 Chapter 3 链表 3.1 链表 3.1.1 链表介绍 3.1.2 链表CRUD 3.1.3 单链表题目 3.2 双向链表 3.2.1 双向链表介绍 3.2. ...

  5. 【自学笔记】尚硅谷数据结构与算法Chapter 5 递归

    Chapter 5 递归 文章目录 Chapter 5 递归 5.1 递归概念 5.2 递归的调用机制 5.3 迷宫问题(回溯) 5.4 八皇后问题(回溯) 5.1 递归概念 递归好就是方法自己调用自 ...

  6. 【自学笔记】尚硅谷数据结构与算法Chapter 2 稀疏数组和队列

    Chapter 2 稀疏数组和队列 文章目录 Chapter 2 稀疏数组和队列 2.1 稀疏数组 2.1.1 基本介绍 2.1.2 应用案例 2.2 队列 2.2.1 队列介绍 2.2.2 用数组模 ...

  7. 尚硅谷数据结构和算法01-数据结构介绍和稀疏数组

    文章目录 一.数据结构组成 1.线性结构 2.非线性结构 二.稀疏数组 1.应用场景: 2.稀疏数组转换的思路分析 3.代码实现 补充: %d\t 一.数据结构组成 包括:线性结构和非线性结构 1.线 ...

  8. 数据结构和算法(Java)-张晨光-专题视频课程

    数据结构和算法(Java)-579人已学习 课程介绍         如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的 ...

  9. 视频教程-内功修炼之数据结构与算法-Java

    内功修炼之数据结构与算法 2018年以超过十倍的年业绩增长速度,从中高端IT技术在线教育行业中脱颖而出,成为在线教育领域一匹令人瞩目的黑马.咕泡学院以教学培养.职业规划为核心,旨在帮助学员提升技术技能 ...

  10. 数据结构与算法-java笔记一 更新中

    数据结构与算法-java笔记一 更新中 数据结构与算法 什么是数据结构.算法 数据结构学了有什么用: 线性结构 数组 特点 应用 链表 存储结构 链表类型 单链表 双向链表 双向循环链表 链表与数组的 ...

最新文章

  1. 简单天气应用开发——基本功能完成
  2. 配置文件值注入 ||导入配置文件处理器,以后编写配置就有提示
  3. 网络安全系列之三十五 缓冲区溢出
  4. JavaScript:语言精粹
  5. Javascript远程加载框架 - JFO Remote Framework 1.0
  6. 九度OJ 1035:找出直系亲属(二叉树)
  7. 蚂蚁区块链第19课 联盟链创建及管理
  8. 阿里的数据同步神器——Canal
  9. 运筹优化算法工程师面试汇总
  10. Charles 模拟慢网络
  11. 【VB.net】大地测量——白塞尔大地解算程序设计
  12. python安装结巴_python jieba(结巴)小模块精讲
  13. 如何制作校园平面图及路线导图
  14. 每天五分钟机器学习:评价算法模型常用的数值评估方式——F1值
  15. Vue实现图形化积木式编程(十三)
  16. 小程序如何cdn加速服务器,小程序游戏加速方案
  17. html5 3d引擎 星空,使用3D引擎threeJS实现星空粒子移动效果
  18. kali安装flash player
  19. Android app集成友盟微社区详细步骤
  20. 如何寻找数组中最大值与最小值(取双元素法)

热门文章

  1. 一键steam挂卡linux,steam一键添加免费游戏挂卡
  2. 学计算机要数学吗,学习计算机真的需要数学能力超强吗?
  3. Verilog HDL 实现 74HC595
  4. 三菱PLC控制器FX3GA USB驱动 程序下载
  5. PNAS | 富含亮氨酸重复序列延伸蛋白调节拟南芥耐盐性
  6. 有价值的产品=设计思维+精益创业+敏捷方法
  7. C语言 修改JPEG图片属性
  8. 数据库查询——选课系统
  9. oracle pdb与cdb区别,浅谈oracle 12C的新特性-CDB和PDB
  10. 搭建srs流媒体服务器