您的位置:首页 > Web前端 > JavaScript

JS实现直接插入排序

2015-06-21 09:57 681 查看
直接插入排序:把数组分为已排序和未排序两部分,把未排序的元素一次一个插入到已排序部分的合适位置上。已排序部分逐渐增大,直到整个数组变成有序的。

设数组为a


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]处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 插入排序