插入排序是一种简单而稳定的排序算法,它从未排序的列表中挑选一个元素,并将其插入排序后的列表中的适当位置。而稳定的算法指的是两个等价元素出现相同的情况,那么稳定的算法在执行完排序算法后,会将元素保持在它们的相对位置。
插入排序算法在那些我们在列表中的元素数量较少,或者列表中的大部分元素已经被排序,并且较少元素被错位的情况下非常有帮助。
插入式排序如何工作
让我们考虑一个例子来更好地理解插入排序背后的逻辑。假设我们有一个由6个元素组成的未经排序的数组,我们必须用插入式排序来对它们进行排序。

现在为了对上述数组进行排序,我们将从索引1到最后一个索引对数组进行遍历。最初,我们假设数组的第0个索引已被排序,此后我们将对当前元素和它的前一个元素进行比较。如果当前元素小于之前的元素,那么我们将交换它们的位置。
第一步
在第一步中,我们将比较索引1和索引0,第一个索引的值'47'大于第0个索引的值,所以在第一步中不会有变化(元素不会交换)。

第二步
现在,在第二步中,我们将假设前两个元素被排序,所以游标将在索引2处,我们将比较索引2和其前面的元素。

因为'25'比'47'小,所以将'25'和'47'交换。接下来,'25'也将与第0个索引值进行比较。25'比'15'大,所以它不会被交换。
第二步之后的数组将被更新为。

第三步
在第三步中,我们认为前三个值已经被排序,游标将在第三个索引处。因此,我们将把第三个索引与之前的值进行比较。

在索引3处,'55'与每个元素逐一进行比较,但它大于其所有的先前元素,所以数组元素的位置不会有变化。
第四步
现在我们在索引4,这里有一个值'20',我们必须将它与数组的所有先前元素进行比较。

由于'20'小于'25','47'和'55',所以它将被插入第一个索引,而'25','47'和'55'将从它们当前的索引中移到右边一个索引(i+1索引)。
更新后的数组将是。

第五步
现在我们在索引5处,当前值是'10',是所有数组值中最小的,所以它将被插入到第0个索引。
这样,整个数组将使用插入式排序法进行排序。

我们已经完成了插入式排序的概念部分,现在我们将在JavaScript中实现这个概念。
在JavaScript中实现插入式排序
在javascript中实现插入式排序的代码如下。
function insertion_Sort(input_array, array_length)
{
let i, pivot_value, j;
for (i = 1; i = 0 && input_array[j] > pivot_value)
{
input_array[j + 1] = input_array[j];
j = j - 1;
}
input_array[j + 1] = pivot_value;
}
return input_array;
}
let input_array = [15,47,25,55,20,10 ];
let array_length = input_array.length;
insertion_Sort(input_array, array_length);
console.log("final sorted array : ", input_array);
在上面的代码中,我们创建了一个函数 "insertion_sort",并将输入数组和数组长度传递给它。然后我们进行循环迭代,直到数组的长度。
在循环中,我们选择 "pivot_value = input_array[i]"作为支点值,对当前元素和之前的元素进行比较,并设置 "j= i-1",代表我们排序后数组的最后一个元素。
在这里的每一次迭代中,当前元素被分配给枢轴值,而枢轴值将被视为每一步中未排序数组的第一个元素。

我们利用while循环对数组元素进行排序,在这个循环中我们将当前元素与之前的元素进行比较。如果当前元素小于之前的任何一个元素,并且我们找到了合适的位置将该元素插入排序后的数组中,那么我们将该元素插入到合适的位置,并将其他元素向右移动一个位置。整个过程每一步都在重复,直到数组完全排序完毕。
输出
最后,我们调用 "insertion_sort"函数,并使用 "console.log"方法在浏览器的控制台打印出排序后的数组。插入排序算法的输出将是。

结论
插入排序是一种排序算法,每次对一个元素进行排序。它在适当的位置上逐一插入元素,以创建一个排序的数组。如果数组元素的数量较少,并且大多数数组元素已经被排序,那么它可以提供有效的结果。
在这篇文章中,我们考虑了一个例子来弄清楚插入排序的逻辑,我们讨论了插入排序算法在每个步骤方面的工作,并介绍了每个步骤之后的更新阵列。最后,一旦我们理解了插入排序背后的想法,我们就用JavaScript来实现它。