排序算法--插入排序

一.插入排序的思路

插入排序思想的核心是局部有序

比如在一个队列中的队员,我们选择其中一个作为被标记的队员
这个被标记的队员左边的所有队员已经是局部有序
这意味着在队列中,有一部分人是按顺序排好的,另一部分还没有顺序

  • 第一个元素开始,该元素可以认为是已经被排序
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描
  • 如果该元素(已排序)大于新元素,将该元素移到下一位
  • 重复上一步骤,直到找到已排序的元素小于或者等于新元素的位置
  • 将新元素插入到该位置后,重复上面的步骤

二.插入排序的代码

ArrayList.prototype.insertionSort = function(){
	var length = this.array.length
	//外层循环:从第1个位置开始获取数据,向前面局部有序进行插入
	for(var i = 1; i < length; i++){
		var temp = this.array[i]
		var j = i
		//内层循环:获取i位置的元素,和前面的数据依次进行比较
		while(this.array[j-1] > temp && j > 0){
			this.array[j] = this.array[j-1]
			j--
		} 
		//将temp放置在j位置
		this.array[j] = temp
	}
}

三.插入排序的效率

  1. 插入排序的比较次数:
    第一趟时,需要的最多次数是1,第二趟最多次数是2,依次类推;因此插入排序的最多次数是:N*(N-1)/2。然而每趟发现插入点之前,平均只有全体数据项的一半需要进行比较,所以平均比较次数为:N*(N-1)/4,相比于选择和冒泡排序,该排序方法的比较次数是少了一半的。
  2. 插入排序的复制次数:
    第一趟时,需要的最多复制次数是1,第二趟最多复制次数是2,依次类推;因此插入排序的最多复制次数是:N*(N-1)/2。
    平均次数为N*(N-1)/4

该算法的效率是高于选择和冒泡排序的

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值