3分钟学算法.04.插入排序

插入排序是对于基本有序数组最好用的排序算法。

1.核心思想

从第2个数开始,依次和前面的所有数比较,如果大于前数,则插入到它前面(所谓插入就是依次和前数换位,见下面step3)。

假设有数组:3 5 4 6 2
step1: 从第二个数5开始,依次与前数比较,5大于3,则5插到3前面:
初始:3 5 4 6 2
//5>3,换:
5 3 4 6 2

step2: 从第3个数4开始,依次与前数比较,4大于3, 则4插到3前面:
初始: 5 3 4 6 2

// 4>3,换:
5 4 3 6 2

// 4<5,不换:
5 4 3 6 2

step3: 从第四个数6开始,依次与前数比较,大于3 4 5,则6插到5前面:
初始:5 4 3 6 2
//6>3,换:
5 4 6 3 2
//6>4,换:
5 6 4 3 2
//6>5,换:
6 5 4 3 2

step4: 从第五个数2开始,依次与前数比较,最小,故不变:
6 5 4 3 2

2.代码实现

先附上一个好用的在线Java编译工具:https://www.jdoodle.com/online-java-compiler/

import java.util.Arrays;

public class InsertionSort{
	public static void main(String[] args){
		int[] array = {3,1,9,4,2};
		System.out.println("排序前:"+Arrays.toString(array));
		sort(array);
	}
	
	public static void sort(int[] array){
		for(int i =1 ; i <= array.length - 1 ; i++){
			for(int j = i ; j > 0 ; j--){
				if(array[j] >= array[j-1]){
					changePosition(array, j , j-1);
					System.out.println("排序后:"+Arrays.toString(array));
				}
			}
		}
	}

	public static void changePosition(int[] array, int a , int b){
		int temp = array[a];
		array[a] = array[b];
		array[b] = temp; 
	}

}

3.性能分析

时间复杂度:O(n²) ,n + n - 1 + n - 2 +…+2+1 = n(n-1)/2 = 0.5n² - 0.5n ≈ n²
空间复杂度:O(1)
稳定性:稳定,由于插入对象和被比较对象相等时,仍会插入到前面,所以是稳定的。

欢迎各位评论交流指点,您的每一分评论和关注都是对我的莫大鼓励!
如果对各位大佬有帮助,也请点个赞吧hhhh~

下一篇《3分钟学算法.05.希尔排序》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值