1. 图解-直接插入排序

1.   思想

    直接插入排序就是  打牌中抓牌插入的过程。(一般人都会整理为从小到大的序列)

    思想:按照数据的大小插入到有序队列的合适位置。

 

 

2.  图解过程

例1

例2

 

 

3. 算法分析

 

排序类别

排序方法

时间复杂度

空间复杂度

稳定性

复杂性

平均情况

最坏情况

最好情况

插入排序

直接插入排序

O(N²)

O(N²)

O(N)

O(1)

稳定

简单

 

时间复杂度:

当数据正序时,执行效率最好,每次插入都不用移动前面的元素,时间复杂度为O(N)。 

当数据反序时,执行效率最差,每次插入都要前面的元素后移,时间复杂度为O(N²)。

所以,数据越接近正序,直接插入排序的算法性能越好。

 

4. Code in JAVA

 

public class InsertSort {


	//插入排序方法
	public static void insertSort(int[] array){
		for (int i = 1; i < array.length; i++) {
		    //从第二位开始遍历数组,Key 对应图解过程红色数据
		    int key = array[i];
		    int j = i - 1;
		    //遍历数组下标i之前的数据,如果大于当前值,则后移一位
		    for(;j >= 0 && array[j] > key;j--){
		        array[j + 1] = array[j];
		    }
		  
		    //直至遍历到最前一位,或者当前值小于遍历值,将当前值插入当前位置的后一个位置
		    array[j+1]=key;
		}
	
	}
	
	public static void printArray(int[] array) {
		System.out.print("{");
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]);
			if (i < array.length - 1) {
				System.out.print(", ");
			}
		}
		System.out.println("}");
	}



	
	
	public static void main(String[] args) {
		int[] array = { 9,3, 1, 4,2,7,8,6,5 };
		insertSort(array);
		printArray(array);
		
	}


 
	

}

 

 

5. 参考引用

图解过程引自  作者: dreamcatcher-cx

https://www.cnblogs.com/chengxiao/p/6103002.html

和 

http://www.cnblogs.com/xwz0528/p/4557743.html

 

分析引自  静默虚空

https://www.cnblogs.com/jingmoxukong/p/4303270.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值