其它经典排序算法:https://blog.csdn.net/weixin_43304253/article/details/121209905

插入排序算法:

思路:将数据分为已经排序好的数据和未排序的数据。取出未排序中的数据、从后向前的形式找到其在已经排好序数据中的位置、然后插入该数据。

过程

  • 1、将数据分为已排序和未排序两组。默认第一个数据是已排序
  • 2、从未排序数据中从前往后的顺序取出数据、和已经排好序的数据比较(从后向前比较)
  • 3、如果取出的未排序数据小于拍好序的数据、则将拍好序的数据向后移动
  • 4、找到当前的未排序数据在排序好数据中的插入位置、放入该数据
  • 5、再次从未排序数据中取出下一个数据、重复2-5

图解过程


代码实现

package com.zheng.dao;

import java.util.Random;

//插入排序算法
public class TestInsertDemo {
/**
* 1、思想:将数据分为已经排序好的数据和未排序的数据。取出未排序中的数据、从后向前的形式找到其在已经排好序数据中的位置、然后插入该数据
*/ public int[] insertArr(int[] arr) {
int len = arr.length;
if (len < 0) { //数组长度为零、返回null
return null;
} else { for (int i = 0; i < len - 1; i++) {
int current = arr[i + 1];//已经拍好序的下一个元素位置。(还未进行排序的第一个位置)
int index = i;
//然后将这个元素和之前拍好序的数组进行比较、将该数据放入合适的位置
while (index >= 0 && current < arr[index]) {//如果当前的数据比拍好序列的最后一个数据小
arr[index + 1] = arr[index];//将当前的数据向后移动一位
index--;
}
arr[index + 1] = current;//经过一轮的比较、找到放入新数据的位置
} } return arr;
} //随机生成一个数组
public int[] randomArr(int len, int maxNum, int minNum) {
int[] arr = new int[len];//定义一个一维数组
Random random = new Random();
for (int i = 0; i < len; i++) {
arr[i] = random.nextInt(maxNum - minNum + 1) + minNum;
}
return arr;
} //打印
private void Print(int[] arr) {
int len = arr.length;
System.out.print("【");
for (int i = 0; i < len; i++) {
if (i == len - 1) {
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + "、");
}
}
System.out.println("】");
} public static void main(String[] args) {
TestInsertDemo testInsertDemo = new TestInsertDemo(); int[] arr = testInsertDemo.randomArr(10, 100, 50);
System.out.print("生成的随机数组:");
testInsertDemo.Print(arr);
System.out.print("选择排序后数据:");
testInsertDemo.insertArr(arr);
testInsertDemo.Print(arr); }
}

测试1:

测试2:

测试3:

插入排序算法(Java代码实现)的更多相关文章

  1. 排序算法Java代码实现(三)—— 插入排序 和 希尔排序

    因为希尔排序的核心思想是插入排序,所以本篇将两篇排序一起记录 本篇内容: 插入排序 希尔排序 (一)插入排序 算法思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序 ...

  2. 排序系列 之 折半插入排序算法 —— Java实现

    基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...

  3. 排序算法系列:插入排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)

    在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 我总结一个清晰不罗嗦版: 原理: 和选择排序类似的是也分成“已排序”部分,和“未排 ...

  4. 排序系列 之 直接插入排序算法 —— Java实现

    直接插入排序算法 基本思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的 ...

  5. 排序算法Java代码实现(一)—— 选择排序

    以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦! 本片分为两部分代码: 常用方法封装 排序算法里需要频繁使 ...

  6. 插入排序算法 Java实现

    插入排序算法是算法排序中的一种: 该算法是假设已有序列是有序序列,从首元素(首元素为单个元素,肯定是有序的...)开始分析,对其他元素的位置进行有序的确定: 以算法为例: public class I ...

  7. 算法-java代码实现插入排序

    插入排序  

  8. 算法-java代码实现希尔排序

    希尔排序 第8节 希尔排序练习题 对于一个int数组,请编写一个希尔排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素小于等于2000. 测试样例: [1,2 ...

  9. 算法-java代码实现基数排序

    基数排序 第11节 基数排序练习题 对于一个int数组,请编写一个基数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素均小于等于2000. 测试样例: [1 ...

  10. 算法-java代码实现计数排序

    计数排序   第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...

随机推荐

  1. lamp平台构建

    目录 lamp平台构建 安装httpd 安装mysql 安装php 配置apache 启用代理模块 配置虚拟主机 启用代理模块 验证 lamp平台构建 环境说明: 系统平台 IP 需要安装的服务 ce ...

  2. 杭州思科对 Apache DolphinScheduler Alert 模块的改造

    杭州思科已经将 Apache DolphinScheduler 引入公司自建的大数据平台.目前,杭州思科大数据工程师 李庆旺 负责 Alert 模块的改造已基本完成,以更完善的 Alert 模块适应实 ...

  3. Excel 数学函数(三):RAND 和 RANDBETWEEN

    Excel 主要有 RAND 和 RANDBETWEEN 这两个函数生成随机数.RAND 默认生成 0~1 的随机数:RANDBETWEEN 有两个参数:bottom 和 top,bottom 代表函 ...

  4. python常量与变量的本质

    python语法常量与变量的本质 python语法之注释 1.python语法注释有哪几种? (1.)单行注释 # 井号键单行注释 使用方法:首先在另起一行按('#')井号键进行注释,如果需要代码后面 ...

  5. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据

    1.简介 上一篇主要就讲解和分享Fiddler断点的理论和操作,今天宏哥就用具体例子,将上一篇中的理论知识实践一下.而且在实际测试过程中,有时候需要修改请求或响应数据,或者直接模拟服务器响应,此时可以 ...

  6. 未完待续【java】JavaEE学习路线总览

    这个博客会详细介绍各种技术的知识点,从零基础到入门,充当引路的作用. 同时也会发布一些Swift语言.c#语言.Xcode开发的学习笔记.一些阅读的笔记(部分读书笔记无法发布). 目前1-43的Jav ...

  7. windows优化原神

    原神3.0新地图很卡顿? 锐距显卡带不动? 看一下我的配置 英特尔i5-1135G7 内存16GB可以拓展32GB 固态512GB 原神优化前帧率50左右 优化后59-60最差55 展示图原神设置图 ...

  8. .Net+Vue3实现数据简易导入功能

    在开发的过程中,上传文件或者导入数据是一件很常见的事情,导入数据可以有两种方式: 前端上传文件到后台,后台读取文件内容,进行验证再进行存储 前端读取数据,进行数据验证,然后发送数据到后台进行存储 这两 ...

  9. 免费内网穿透服务Localtunnel

    Localtunnel 将为您分配一个唯一的可公开访问的 url,它将所有请求代理到您本地运行的网络服务器. 快速开始 全局安装 Localtunnel(需要 NodeJS)以使其在任何地方都可以访问 ...

  10. KingbaseFlySync ddl变更流程

    关键字: KingbaseFlySync.Linux.x86_64.mips64el.aarch64.Java 一.ddl变更流程 1. 停掉客户业务,保证没有新数据产生 确认Oracle数据库上所有 ...