对数组进行排序是一种非常简单的比较排序。甲比较排序比较我们试图与数组中的其它值进行排序的当前值。它一次只处理一个项目,然后将每个项目迭代地放置在正确的位置,以便获得所需的排序数组。
实际上,插入排序的效率不如某些高级算法,例如堆排序或合并排序。在处理大型程序时,这不是最佳选择。由于插入排序的隐藏常数值低,因此在处理小型数组时,插入排序的性能优于某些高级算法,例如堆或快速排序。
插入排序是通过在数组上从左向右移动来实现的。它将当前项目用作“键”,并在该键左侧搜索一个值,以查找该键实际应位于的位置。
在下面的示例中,给定的数组为0,-3,5,8,2,7,6
迭代0-在第一个迭代中,我们只有未排序的实际数组为0,-3、5、8、2、7、6。
迭代1-在此迭代中,键是索引1处的值为-3。插入排序将键与该键左侧的值进行比较,然后继续执行该过程。由于-3小于0,因此将数组指定为-3,0,5,8,2,7,6,从而将其移至0的左侧。
迭代2-这里的键是5(索引2的值)。它将与左侧的值-3和0进行比较,并放在其排序后的值中。因此,迭代2之后的数组为-3,0,5,8,2,7,6。
迭代3-在此迭代中,将键值8与左侧的元素进行比较,最终数组将为-3,0,5,8,2,7,6。
迭代4-在此迭代中,将键值2与左侧的值进行比较,并将其放在已排序的位置。因此,迭代4之后的最终数组是-3,0,2,5,8,7,6。
同样,在最终迭代结束时,排序后的数组将为-3,0,2,5,6,7,8
<html> <head> <script> function iSort(array) { for (var p = 1; p < array.length; p++) { if (array[p] < array[0]){ array.unshift(array.splice(p,1)[0]); } else if (array[p] > array[p-1]){ continue; } else { for (var q = 1; q < p; q++) { if (array[p] > array[q-1] && array[p] < array[q]){ array.splice(q,0,array.splice(p,1)[0]); } } } } return array; } document.write(iSort([0,-3,5,8,2,7,6])); </script> </body> </html>
-3,0,2,5,6,7,8