将n个元素的数列分为已有序和无序两个部分。
数列:{a1,a2,a3,a4,…,an}
将该数列的第一元素视为有序数列,后面都视为无序数列:
{{a1},{a2,a3,a4,…,an}}
将无序数列中的元素插入到有序数列的对应位置,插入前通过比大小的方式找到其在有序数列中的对应位置。
var arr = [11, 4, 8,1, 7, 6, 5];
console.log(arr);//11,4,8,1,7,6,5
for(var i = 1; i < arr.length; i++){
//升序
if(arr[i] < arr[i-1]){
//取出无序数列中的第i个作为被插入元素
var temp = arr[i];
//记住有序数列的最后一个位置,并且将有序数列位置扩大一个
var j = i - 1;
arr[i] = arr[j];
//比大小,找到被插入元素所在的位置
while(j >= 0 && temp < arr[j]){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
}
console.log(arr);// 1,4,5,6,7,8,11
缺点:跟冒泡排序一样当数据量大时不适合使用