插入排序
面试中遇到,30分钟实现冒泡排序、选择排序、插入排序以及快速排序,学过的好久没看,当时忘了,只实现了冒泡和选择,所以对这几种排序算法分别温习一下,加深印象。
基本原理
把数组分为两部分,一部分是已排好序的(刚开始只有数组的第一个元素,后面会不断增加),另一部分是未排好序的,遍历未好排序的元素,在已排好序的元素中找到合适的位置,不断扩充已排序的部分,直到未排序的元素都加入到已排好序的那一部分中。
代码实现
function insert_sort(a){
let preIndex,temp;
//从第二个数组元素开始,都是未排好序的
for(let i=1;i<a.length;i++){
preIndex=i-1;
temp=a[i];
//给当前的未排序元素在已排序元素中找合适的插入位置
while(preIndex>=0&&a[preIndex]>temp){
//若小于位于自己前面的与自己相邻的已排好序序列中的元素
//就插入到那个已排好序序列中的元素前面
a[preIndex+1]=a[preIndex];
preIndex--;
}
//跳出循环后,说明a[preIndex]这个位置的元素比自己小
//或者是左别已经没有元素可用于比较了
//那么就把temp顺序地放在a[preIndex]后面
a[preIndex+1]=temp;
}
return a;
}
let a=[1,3,4,5,6,7,2,1];
console.log(insert_sort(a));