首页 > 编程语言 >【算法】插入排序算法原理及实现

【算法】插入排序算法原理及实现

时间:2023-02-06 11:05:29浏览次数:36  
标签:arr 插入排序 元素 交换 算法 序列 原理 排序


1.什么是插入排序

  • 每一步将一个待排序的数据插入到前面已经排序好的有序序列里,直到插完所有的元素为止。
  • 插入排序与打扑克牌很类似,你摸到第一张牌的时候是不需要排序的,后续摸到的牌可以根据第一张牌进行向左或者向右排序。
  • 算法实现
  • 直接插入排序是把无序的序列里的数据插入到有序的序列中去。
  • 在遍历无序序列的时候,首先拿无序序列里的第一个元素跟有序序列里的每一个元素比较,并且插入到合适的位置,一直到无序序列里的所有元素插入完毕为止。

2.插入排序算法图解

  • 初始化序列如下所示,分为有序序列(没有任何元素)和无序序列(8,2,6,4,3,7,5),一开始有序序列是没有任何元素的。

【算法】插入排序算法原理及实现_java

  • 第一轮用8和2比较,返现2比8小,交换位置,变成2 8
  • 第二轮用8和6比较,交换位置,然后再用2和6比较,发现6比2大不用交换位置变成 2 6 8
  • 第三轮用8和4比较,交换位置,再用6和4比较交换位置,2和4比较不用交换位置
  • 第四轮8和3比较,交换位置,6和3比较交换位置,4和3比较交换位置,2和3比较不用交换位置
  • 后面以此类推,都是向左比较到第一个元素,也就是当前元素左边都是有序的,右边都是无序的

【算法】插入排序算法原理及实现_排序算法_02

【算法】插入排序算法原理及实现_算法_03

【算法】插入排序算法原理及实现_排序算法_04

3.插入排序代码实现

(1)整体编码实现

public class InsertSort {
public static void main(String[] args) {
int[] arr = {8,2,6,4,3,7,5};
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){
//第一层循环,把数组分成两部分,左边是已将排好序的,右边是未排序的
//当前下表左边的元素已经排好序,右边还未排序
for (int i = 1; i < arr.length; i++) {
//内层循环,从当前下标开始祥左比较,如果发现比左边元素小就惊醒交换
//直到比较到左边第一个元素
for (int j = i; j > 0; j--) {
//依次交换,依次比较,如果不比前一个元素小,就跳出
if(arr[j-1]>arr[j]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}else{
break;
}
}
System.out.println("第 "+i+" 轮: "+Arrays.toString(arr));
}
}
}

(2)代码测试

【算法】插入排序算法原理及实现_System_05


标签:arr,插入排序,元素,交换,算法,序列,原理,排序
From: https://blog.51cto.com/u_15646271/6038738

相关文章

  • DFA算法实现自管理敏感词
    工具类:SensitiveWordUtilimportjava.util.*;publicclassSensitiveWordUtil{publicstaticMap<String,Object>dictionaryMap=newHashMap<>();/**......
  • 6.6哈夫曼算法能够大幅提升压缩比率
    使用哈夫曼树后,出现频率越高的数据所占用的数据位数就越少而且数据的区分也可以很清晰地实现。通过图6-5的步骤2可以发现,在用枝条连接数据时,我们是从出现频率较低的数......
  • 6.6哈夫曼算法能够大幅提升压缩比率
    使用哈夫曼树后,出现频率越高的数据所占用的数据位数就越少,而且数据的区分也可以很清晰地实现。但哈夫曼算法为什么达到这么好的效果呢,大家都了解吗?通过图6-5的步骤2可以发......
  • 搞懂设计模式——代理模式 + 原理分析
    作者:京东零售秦浩然引子举个栗子,众所周知,我们是可以在京东上购买机票的。但机票是航司提供的,我们本质上是代理销售而已。那为什么航司要让我们代理销售呢?我们又是如......
  • 6.4通过莫尔斯编码来看哈夫曼算法的基础
    压缩技巧实际上有很多种。接下来,我们就来看一下本章要介绍的第二个压缩技巧,即哈夫曼算法。哈夫曼算法是哈夫曼(D.A.Huffman)于1952年提出来的压缩算法。日本人比较常用的......
  • 6.4通过莫尔斯编码来看哈夫曼算法的基础
    哈夫曼算法是1952年提出的压缩算法,日本人常用的压缩软件LHA使用的就是哈夫曼算法。文本文件是由不同类型的字符组合而成的,而且不同的字符出现的次数也是不同的。  注......
  • 6.2RLE算法的机制
    对存储着AAAAAABBCDDEEEEEF这17个半角字符的文件(文本文件)进行压缩。由于半角字母中,1个字符是作为1个字节的数据被保存在文件中的,因此上述文件的大小就是17字节,只要文件小......
  • elasticsearch高可用 原理
    elasticsearch高可用原理 ES是如何解决高可用ES是一个分布式全文检索框架,隐藏了复杂的处理机制,核心数据分片机制、集群发现、分片负载均衡请求路由。ES的高可用架构......
  • BP神经网络的数学原理及其算法实现
    什么是BP网络BP网络的数学原理BP网络算法实现 转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/44514073 上一篇文章介绍了KNN分类器,当......
  • 代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索
    Day22周末休息~元宵节快乐一、参考资料修剪二叉搜索树题目链接/文章讲解:https://programmercarl.com/0669.%E4%BF%AE%E5%89%AA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%......