插入排序(Insertion Sort)

引言

「插入排序 insertion sort」是一种简单的排序算法,它的工作原理与手动整理一副牌的过程非常相似。

原理

插入排序的基本思想是:每次从未排序的元素中取出一个元素,将其插入到已排序元素的适当位置,直到所有元素都有序。具体来说,我们在未排序区间选择一个基准元素,将该元素与其左侧已排序区间的元素逐一比较大小,并将该元素插入到正确的位置。如图展示了数组插入元素的操作流程。设基准元素为 base ,我们需要将从目标索引到 base 之间的所有元素向右移动一位,然后再将 base 赋值给目标索引。
在这里插入图片描述

算法流程

插入排序的整体流程如图所示。

  1. 初始状态下,数组的第 1 个元素已完成排序。
  2. 选取数组的第 2 个元素作为 base ,将其插入到正确位置后,数组的前 2 个元素已排序。
  3. 选取第 3 个元素作为 base ,将其插入到正确位置后,数组的前 3 个元素已排序。
  4. 以此类推,在最后一轮中,选取最后一个元素作为 base ,将其插入到正确位置后,所有元素均已排序。
    在这里插入图片描述

代码展示

public static void main(String[] args) {
        int[] nums = {4,1,3,1,5,2};
        insertSort(nums);
        for (int i : nums) {
            System.out.print(i+" ");
        }
    }
 public static void insertSort(int[] a){
        // 外循环:已排序元素数量为 1, 2, ..., n
        for(int i=1;i<a.length;i++){
            int base=a[i],j=i-1;
            // 内循环:将 base 插入到已排序部分的正确位置
            while (j>=0&&base<a[j]){
                a[j+1]=a[j];// 将 nums[j] 向右移动一位
                j--;
            }
            a[j+1]=base;// 将 base 赋值到正确位置
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值