【发布时间】:2016-03-09 06:09:20
【问题描述】:
所以我猜是因为它只是比较了 A[k] 和 A[k-1],并且在一次扫描中完成了实现,但它仍然不清楚。有人可以解释得更好。 谢谢
【问题讨论】:
-
根据备选方案分析排序数组的性能。这就是答案。
所以我猜是因为它只是比较了 A[k] 和 A[k-1],并且在一次扫描中完成了实现,但它仍然不清楚。有人可以解释得更好。 谢谢
【问题讨论】:
此link 显示了具有不同类型数据集的排序算法的图形表示。 可以看到,在对数据进行排序后,算法复杂度降低到 N,相当于输入的元素个数。
所提供的链接清楚地说明了它的效率如何。
【讨论】:
您回答了您自己的问题:对于几乎排序的数组,插入排序只需要少数 O(n) 传递即可完成。将其与合并排序等分而治之的排序算法进行对比,后者采用O(n*lgn)。对于n 的任何非平凡值,分治算法将需要多次O(n) 传递,即使数组几乎完全排序,而插入排序可能只需要几次。
【讨论】:
插入排序是一种比选择排序更快、改进程度更高的排序算法。在选择排序中,无论数据是否已经排序,算法都会遍历所有数据。但是,插入排序的工作方式不同,它不是在每次通过后迭代所有数据,而是算法只遍历它需要的数据,直到正在排序的段被排序。同样,插入排序需要两个循环,因此需要两个主要变量,在本例中分别命名为“i”和“j”。变量 'i' 和 'j' 在第一个循环的每次通过后都从相同的索引开始,第二个循环仅在变量 'j' 大于索引 0 并且 arr[j]
【讨论】:
排序算法的总体目标是尽量减少比较次数。排序算法在比较次数上有一个下限和一个上限(n log n 合并和堆排序的最坏情况,n log n 快速排序的平均情况)。在最一般的情况下,您会使用恰好具有最佳平均或最佳最坏情况比较次数的算法。但是,当您对数据有所了解时(例如,数组已经排序或几乎排序),您可以利用插入排序的下限远低于“n log n”排序这一事实。
例如,如果你有一个数组 [1,2,3,4,5,6,7,9] 并且你需要在其中插入 8,你可以将它插入到最后,然后对数组进行排序使用 vanilla n log n 排序(它将进行大约 28 次比较(大致)以将数据排序为 [1,2,3,4,5,6,7,8,9])。但是,插入排序只允许您在大约 8 次比较中将 8 插入正确的位置。
【讨论】: