插入排序

一)算法介绍

插入排序是一种比较简单的稳定排序算法

基本操作:将一条记录插入到一个已排好的有序列表中,重新得到一个记录数量增1的有序列表。

稳定排序:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;

 

二)算法原理

基本原理通过构建一个有序序列,对未排序数据,从已排序序列中从后往前扫描,找到相应的位置并插入。​

算法步骤图解(从first到last依次从小到大排列)

源数据:

第一遍排序:假设第一个元素已经排好序,选第二个元素44作为插入值,44>3,44和3位置不变。

第二遍排序:选第三个元素38作为插入值,38<44,把38插入到44前面,再比较38>3,38和3位置不变。

第三遍排序:选第四个元素5作为插入值,5<44,把5插入到44前面,再比较5<38,把5插入到38前面,比较5>3,5和3位置不变。

第四遍排序:选第五个元素47作为插入值,47>44>38>5>3,所以元素位置都不变。

第五遍排序:选第六个元素15作为插入值,15<47,把15插入到47前面,再比较15<44,把15插入到44前面,再比较15<38,把15插入到38前面,比较15>5>3,位置不变。

第六遍排序:选第七个元素36作为插入值,36<47,把36插入到47前面,再比较36<44,把36插入到44前面,再比较36<38,把36插入到38前面,比较36>15>5>3,位置不变。排序完成。

算法复杂度:

最差情况:T(n) = O(n^2)

最好情况:T(n) = O(n),在所有元素已经排好序的情况(只需要比较一次)

// n=100;
// O(n)含义
for(i=0;i<100;i++){
}

// O(n^2)含义
for(i=0;i<100;i++) {
    for(i=0;i<100;i++){
    }
}

 

三)算法源码

步骤简介:通过不断选择插入值,依次从右往左和数据中的元素比较,找到比插入值元素大的数,就把插入值插入到元素前面。

public static int[] insertionSort(int[] nums) {
	if (nums == null) {
		return null;
	}
		
	// 循环
	for (int i = 0; i < nums.length - 1; i++) {
		int index = i; // 记录元素下标i
		int insertValue = nums[i+1]; // 取第2个元素作为插入值
			
		while (index >= 0 && nums[index] > insertValue) {
			nums[index+1] = nums[index]; // 把较大的值往后移动一位
			index--; // 依次从右到左比较
		}
		nums[index+1] = insertValue; // 把较小的值插入到前面
	}
		
	return nums;
}

 

识别二维码关注个人微信公众号

本章完结,待续,欢迎转载!
 
本文说明:该文章属于原创,如需转载,请标明文章转载来源!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值