数据结构与算法系列(四)—插入排序

数据结构与算法系列(四)—插入排序

前言

大家好,牧码心今天给大家推荐一篇数据结构与算法系列(四)—插入排序的文章,希望对你有所帮助。大纲如下:

  • 插入排序基本介绍
  • 插入排序图文说明
  • 插入排序时空复杂度和稳定性
  • 插入排序具体实现

插入排序基本介绍

插入排序 是一种较简单的排序算法,排序过程类似于打扑克牌,将手中的牌进行排序,举个例子,比如我手中有黑桃6,7,9,10这四张牌,此时我又抓到了一张黑桃8,自然会在已经有序的四张牌中找到黑桃8应该插入的位置,也就是7和9之间,把黑桃8插入进去完成排序。其基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。。

插入排序图文说明

  • 下面以数列{20,40,30,10,60,50}为例,演示插入排序过程
    插入排序过程
    排序流程说明:
    • 给定无序数组{20,40,30,10,60,50},从小到排序,并把数组的首元素20作为有序区,此时有序区只有这一个元素:
      • 第1趟:让元素30与有序区比较,20<30 ,无交换。此时有序去增加到2个元素:20,30
      • 第2趟:让元素40与有序区比较,30<40 ,无交换;20<40,无交换。此时有序去增加到3个元素:20,30,40
      • 第3趟:让元素10与有序区比较,40>10 ,交换;30>10,交换;20>10 交换。此时有序去增加到4个元素:10,20,30,40
      • 以此类推,插入排序一共会进行(数组长度-1)轮比较

插入排序时空复杂度和稳定性

时间复杂度空间复杂度稳定性
O(n^2)O(1)稳定
  • 说明
    • 时间复杂度:假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1!因此,直接插入排序的时间复杂度是O(N2)。;
    • 空间复杂度 :选择排序是原地排序,没有产生额外的空间,则为O(1) ;

插入排序实现

  • 插入排序(java版)
/**
     * @Author:greekw
     * @Desc: 插入排序:维护一个有序区,将元素一个一个插入到有序区适当的位置,直到所有元素有序。类比:玩扑克
     * 时间复杂度:O(n^2)
     * 空间复杂度:O(1)
     * @Date 0:07 2020/7/22
     * @Param [array]
     * @return void
    **/
    public static void insertSort(int[] array){
        for(int i = 1;i < array.length;i++){
            // 将需要比较的元素放入暂存区
            int insertValue = array[i];
            int j = i-1;
            // 与前面i-1个元素进行比较
            for (; j>=0 && insertValue < array[j]; j--) {
                array[j+1] = array[j];
            }
            array[j+1] = insertValue;
        }
    }
 	// 测试用例
    public static void main(String[] args) {
        int[] selectArray= new int[]{20,40,30,10,60,50};
        insertSort(selectArray);
        System.out.println(Arrays.toString(selectArray));
    }
 

在这里插入图片描述
欢迎关注我的公众 号(牧码心),获取很多精彩文章和学习资料!
公众号图标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值