插入排序

原理

插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

动画演示

在这里插入图片描述

思路讲解

  • 将给定的数组分为两个区间:
    ①已排序区间[0,bound]
    ②未排序区间[bound,size)
  • 分别记录未排序区间的第一个元素和已排序区间最后一个元素的下标,依次比较待排序区间和已排序区间每个元素的大小关系,寻找合适的位置将待排序区间的元素插入已排序区间;

代码实现

代码如下:

public class Test {
    //[0,bound)表示已排序区间
    //[bound,size)表示待排序区间
    public static void insertSort(int[] array){
        for (int bound = 1; bound < array.length; bound++) {
            //记录待排序区间的第一个元素
            int ret = array[bound];
            //记录已排序区间的最后一个元素的下标
            int pos = bound-1;
            //依次比较array[pos]和ret的大小
            for (; pos >= 0 ; pos--) {
                if (array[pos] > ret){
                    array[pos+1] = array[pos];
                }else {
                    break;
                }
            }
            //最终要将待排序区间的元素放到合适的位置
            array[pos+1] = ret;
        }

    }

    public static void main(String[] args) {
        int[] array = {9,5,2,7,3,6,8};
        insertSort(array);
        System.out.println(Arrays.toString(array));
    }
}

运行结果:
在这里插入图片描述

效率分析

稳定性

稳定

时间复杂度

O(n^2)

空间复杂度

O(1)

特点

- 当待排序区间元素较少的时候,排序效率很高;
- 当整个数组比较接近有序的时候,排序效率很高; 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值