如何在JavaScript中实现插入排序?

插入排序

对数组进行排序是一种非常简单的比较排序。甲比较排序比较我们试图与数组中的其它值进行排序的当前值。它一次只处理一个项目,然后将每个项目迭代地放置在正确的位置,以便获得所需的排序数组。

实际上,插入排序的效率不如某些高级算法,例如堆排序合并排序。在处理大型程序时,这不是最佳选择。由于插入排序的隐藏常数值低,因此在处理小型数组时,插入排序的性能优于某些高级算法,例如堆或快速排序。

插入排序是通过在数组上从左向右移动来实现的。它将当前项目用作“键”,并在该键左侧搜索一个值,以查找该键实际应位于的位置。

算法

在下面的示例中,给定的数组为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