常用排序算法(三)——插入排序

本文介绍了插入排序的基本原理,通过类比打扑克牌的过程来解释其工作方式,并给出了具体的排序步骤示例。此外,还提供了插入排序算法的Java实现代码。



        插入排序不是通过交换位置而是通过比较找到合适的位置插入元素来达到排序的目的的。相信大家都有过打扑克牌的经历,特别是牌数较大的。在分牌时可能要整理自己的牌,牌多的时候怎么整理呢?就是拿到一张牌,找到一个合适的位置插入。这个原理其实和插入排序是一样的。举个栗子,对5,3,8,6,4这个无序序列进行简单插入排序,首先假设第一个数的位置时正确的,想一下在拿到第一张牌的时候,没必要整理。然后3要插到5前面,把5后移一位,变成3,5,8,6,4.想一下整理牌的时候应该也是这样吧。然后8不用动,6插在8前面,8后移一位,4插在5前面,从5开始都向后移一位。注意在插入一个数的时候要保证这个数前面的数已经有序。简单插入排序的时间复杂度也是O(n^2)。

       实现代码:

public class InsertSort { 
	public static void insertSort(int[] arr) { 
		if(arr == null || arr.length == 0) 
			return ; 
		for(int i=1; i){//假设第一个数位置时正确的;要往后移,必须要假设第一个。
			int j = i; 
			int target = arr[i]; //待插入的 
			//后移 
			while(j > 0 & target ]) { 
				arr[j] = arr[j-1]; 
				j --; 
			} 
			//插入 
			arr[j] = target; 
		} 
	} 
}

转载于:https://my.oschina.net/u/1587469/blog/724726

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值