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