Algorithm 为什么插入排序是排序或近似排序数组的最佳算法?

Algorithm 为什么插入排序是排序或近似排序数组的最佳算法?,algorithm,sorted,Algorithm,Sorted,所以我猜这是因为它只是比较了[k]和[k-1],并在一次扫描中实现,但仍然不清楚。有人能更好地解释吗。 感谢这显示了具有不同类型数据集的排序算法的图形表示。 如您所见,当对数据进行排序时,算法复杂度降低到N,这相当于作为输入的元素数 提供的链接清楚地说明了它是如何更高效的。您回答了自己的问题:对于几乎排序的数组,插入排序只需要少量的O(n)过程即可完成。与之相比,像merge-sort这样的分治排序算法需要O(n*lgn)。对于n的任何非平凡值,分治算法将需要许多O(n)过程,即使数组几乎完全排

所以我猜这是因为它只是比较了[k]和[k-1],并在一次扫描中实现,但仍然不清楚。有人能更好地解释吗。 感谢

这显示了具有不同类型数据集的排序算法的图形表示。 如您所见,当对数据进行排序时,算法复杂度降低到N,这相当于作为输入的元素数


提供的链接清楚地说明了它是如何更高效的。

您回答了自己的问题:对于几乎排序的数组,插入排序只需要少量的
O(n)
过程即可完成。与之相比,像merge-sort这样的分治排序算法需要
O(n*lgn)
。对于
n
的任何非平凡值,分治算法将需要许多
O(n)
过程,即使数组几乎完全排序,而插入排序可能只需要很少的过程。

排序算法的一般目标是最小化比较次数。排序算法在比较次数上有一个下限和一个上限(
n log n
合并和堆排序的最坏情况,
n log n
快速排序的平均情况)。在最一般的情况下,您会使用一种算法,该算法恰好具有最佳平均数或最佳最坏情况比较数。但是,当您了解有关数据的一些信息(例如,数组已排序或几乎已排序)时,可以利用插入排序的下限远低于“
n log n
”排序这一事实


例如,如果您有一个数组[1,2,3,4,5,6,7,9],需要在其中插入8,您可以在末尾插入它,然后使用普通的
n log n
sort对数组进行排序(这将进行大约28次比较(粗略地)将数据排序为[1,2,3,4,5,6,7,8,9])。但是,插入排序允许您在大约8次比较中将8次插入到正确的位置。

插入排序是一种比选择排序更快、更改进的排序算法。在选择排序中,无论是否已排序,算法都会在每个过程中对所有数据进行迭代。但是,插入排序的工作方式不同,在每次传递之后,算法只遍历需要的数据,而不是遍历所有数据,直到正在排序的段被排序为止。同样,插入排序需要两个循环,因此需要两个主变量,在本例中命名为“i”和“j”。变量“i”和“j”在第一个循环每次通过后都在同一索引上开始,只有当变量“j”大于索引0且arr[j]根据备选方案分析排序数组的性能。这就是答案。可能是重复的谢谢!这帮了大忙不客气,你能接受答案并结束问题吗?这是一个不错的答案,但它完全难以辨认。将文本拆分为短段落,并使用提供的工具格式化代码示例。然后它可能会吸引选票;至少是我的。好的,当然,但我将它与其他算法进行了比较,我也会积极接受你的建议,谢谢。