JS实现直接插入排序

直接插入排序:把数组分为已排序和未排序两部分,把未排序的元素一次一个插入到已排序部分的合适位置上。已排序部分逐渐增大,直到整个数组变成有序的。
设数组为a[n]。
1.初始时,a[0]自成1个有序区,无序区为a[1]、a[2]...a[n-1]。令i=1
2.将a[i]并入当前的有序区a[0]、a[1]...a[i-1]中形成a[0]、a[1]...a[i]的有序区间。
3.i++并重复第二步直到i==n-1。排序完成。 
下面通过一个例子来说明这个排序流程: 
待排序列: 49, 38 , 65 , 97, 76 , 13, 27 ,49
插入49: 49 
插入38: 38, 49 
插入65: 38, 49, 65 
插入97: 38, 49, 65, 97 
插入76: 38, 49, 65, 76, 97 
插入13: 13, 38, 49, 65, 76, 97 

插入27: 13, 27, 38, 49, 65, 76, 97 

插入49: 13, 27, 38, 49, 49, 65, 76, 97

<script>
	function insertSort(arr){
		var len=arr.length;
		var temp,i,j;
		for(i=1;i<len;i++){
			temp=arr[i];  //暂时保存待插入元素
			for(j=i-1;j>=0;j--){
				if(temp<arr[j]){
					arr[j+1]=arr[j]
				}
				else{
					break;
				}
			}
			arr[j+1]=temp;
		}
	}

	var arr=[49,38,65,97,76,13,27,49];
	insertSort(arr);
	alert(arr);

</script> 
上面实现的思路是:每次带插入元素a[i]先和已排序列中最后一个元素a[i-1]进行比较,如果a[i]>a[i-1],则直接把a[i]放在已排序列的末尾就行,无需调整,否则就令j=i-1,temp=a[i]。然后一边将数据a[j]向后移动一边向前搜索,当有数据a[j]<a[i]时停止并将temp放到a[j + 1]处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值