📅  最后修改于: 2021-01-11 10:22:05             🧑  作者: Mango
这是基于就地比较的排序算法。在此,将始终维护一个子列表。例如,数组的下部保持被排序。要“插入”此排序子列表中的元素,必须找到其适当的位置,然后将其插入到该位置。因此,名称为insert sort 。
依次搜索该数组,然后将未排序的项目移动并插入到已排序的子列表中(在同一数组中)。该算法不适用于大型数据集,因为其平均和最坏情况下的复杂度均为〇(n 2 ),其中n是项数。
我们以一个未排序的数组为例。
插入排序比较前两个元素。
它发现14和33都已经按升序排列。目前,已排序的子列表中有14个。
插入排序向前移动,并将33与27进行比较。
并发现33位置不正确。
它将33与27交换。它还将检查已排序子列表的所有元素。在这里,我们看到排序后的子列表只有一个元素14,而27大于14。因此,交换后,排序后的子列表仍然保持排序。
到目前为止,我们在排序的子列表中有14和27。接下来,将33与10相比较。
这些值不是按排序的顺序。
因此,我们交换它们。
但是,交换使27和10未排序。
因此,我们也交换它们。
同样,我们以未排序的顺序找到14和10。
我们再次交换它们。到第三次迭代结束时,我们有了一个包含4个项目的排序子列表。
继续进行此过程,直到所有未排序的值都包含在已排序的子列表中为止。现在我们将看到插入排序的一些编程方面。
现在,我们对这种排序技术的工作原理有了更全面的了解,因此我们可以推导简单的步骤来实现插入排序。
Step 1 − If it is the first element, it is already sorted. return 1;
Step 2 − Pick next element
Step 3 − Compare with all elements in the sorted sub-list
Step 4 − Shift all the elements in the sorted sub-list that is greater than the
value to be sorted
Step 5 − Insert the value
Step 6 − Repeat until list is sorted
procedure insertionSort( A : array of items )
int holePosition
int valueToInsert
for i = 1 to length(A) inclusive do:
/* select value to be inserted */
valueToInsert = A[i]
holePosition = i
/*locate hole position for the element to be inserted */
while holePosition > 0 and A[holePosition-1] > valueToInsert do:
A[holePosition] = A[holePosition-1]
holePosition = holePosition -1
end while
/* insert the number at hole position */
A[holePosition] = valueToInsert
end for
end procedure
要了解使用C编程语言进行的插入排序实现,请单击此处。