插入排序的思想
每一趟将一个待排序元素,按其排序码大小插入到前面已经排好序的一组元素的适当位置上,直到所有待排序元素元素全部插入为止。
插入排序的代码实现
第一轮:
j = 0 对比值:5 6>5 6,6,4 j = -1 5,6,4
第二轮:
j = 1 对比值:4 5>4 5,6,6
j = 0 对比值:4 5,5,6 j=-1 4,5,6
function insertionSort(arr) {
var i, j, key;
for (i = 1; i < arr.length; i++) {
key = arr[i];
j = i - 1;
// 将大于key的元素向后移动
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
// 插入key
arr[j + 1] = key;
}
return arr;
}
插入排序的复杂度
时间复杂度
插入排序的平均时间复杂度为
O(n^2)
,其中n是数组的长度。最好情况下是O(n)
空间复杂度:O(1)