插入排序(Insertion Sort)
插入排序是一种简单的排序算法,这种算法可以一次构建最终排序的数组(或数列)。它在大型数列上的排序效率会远低于一些更高级的排序算法,如快速排序、堆排序、归并排序。
中心思想:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
编码实现:
function insertionSort(arr){
var newArr = arr;
for(let i=1;i<newArr.length;i++){
var temp = newArr[i];
var j = i-1;
while(newArr[j]>temp && j>=0){
newArr[j+1] = newArr[j];
j--;
}
newArr[j+1] = temp;
}
return newArr;
}
二分插入排序
插入排序的一种优化实现, 通过二分法减少遍历时间。
// 先在有序区通过二分查找的方法找到移动元素的起始位置,
// 然后通过这个起始位置将后面所有的元素后移
function sort2(array) {
var len = array.length,
i, j, tmp, low, high, mid, result;
// 赋予数组副本
result = array.slice(0);
for(i = 1; i < len; i++){
tmp = result[i];
low = 0;
high = i - 1;
while(low <= high){
mid = parseInt((low + high)/2, 10);
if(tmp < result[mid]) high = mid - 1;
else low = mid + 1;
}
for(j = i - 1; j >= high+1; j--){
result[j+1] = result[j];
}
result[j+1] = tmp;
}
return result;
}
相关阅读
JavaScript的排序算法——冒泡排序
JavaScript的排序算法——选择排序
JavaScript的排序算法——插入排序
JavaScript的排序算法——归并排序
JavaScript的排序算法——快速排序