Algorithm 插入排序与合并排序哪个更快取决于数组?
假设给我们一个数组A,它已经按递增顺序排序。插入排序和合并排序,哪一种无症状地更快 像wise一样,假设我们得到一个按降序排序的数组B,那么它需要反转。现在哪一个无症状地更快Algorithm 插入排序与合并排序哪个更快取决于数组?,algorithm,sorting,complexity-theory,mergesort,insertion-sort,Algorithm,Sorting,Complexity Theory,Mergesort,Insertion Sort,假设给我们一个数组A,它已经按递增顺序排序。插入排序和合并排序,哪一种无症状地更快 像wise一样,假设我们得到一个按降序排序的数组B,那么它需要反转。现在哪一个无症状地更快 我很难理解这一点,我已经知道插入排序对于较小的数据集更好,合并排序对于较大的数据集更好。但是,我不确定为什么一个比另一个快,这取决于数据集是否已经排序。说到最坏的情况,使用O(N logN)与插入排序的O(N^2)相比,合并排序更快。然而,算法的另一个特征是ω-最佳情况复杂度,即针对合并排序的ω(N logN)插入排序的ω
我很难理解这一点,我已经知道插入排序对于较小的数据集更好,合并排序对于较大的数据集更好。但是,我不确定为什么一个比另一个快,这取决于数据集是否已经排序。说到最坏的情况,使用
O(N logN)
与插入排序的O(N^2)
相比,合并排序更快。然而,算法的另一个特征是ω-最佳情况复杂度,即针对合并排序的ω(N logN)插入排序的ω(N logN)。在查看手头的算法时,可以解释后者:
O(N)
比较O(N logN)
的最坏情况复杂度(但是,该常数将加倍),但会将最佳情况复杂度带到Omega(N)
在数据按相反顺序排序的情况下,插入排序的最坏情况将显示出来,因为我们必须将每个元素(按迭代顺序)从其位置移动到第一个位置,进行
N(N-1)/2
交换,这属于O(N^2)
。然而,由于其递归方法,合并排序仍然采用O(N logN)
。说到最坏的情况,对于插入排序,使用O(N logN)
与O(N^2)
相比,合并排序更快。然而,算法的另一个特征是ω-最佳情况复杂度,即针对合并排序的ω(N logN)插入排序的ω(N logN)。在查看手头的算法时,可以解释后者:
O(N)
比较O(N logN)
的最坏情况复杂度(但是,该常数将加倍),但会将最佳情况复杂度带到Omega(N)
在数据按相反顺序排序的情况下,插入排序的最坏情况将显示出来,因为我们必须将每个元素(按迭代顺序)从其位置移动到第一个位置,进行
N(N-1)/2
交换,这属于O(N^2)
。但是,由于其递归方法,合并排序仍然采用O(N logN)
。您所说的“(除非是基本情况)。”?大多数合并排序的库实现都是插入排序和合并排序的变体,通常是插入排序和合并排序的混合,例如,Wikipedia称之为@EmilB对于递归算法,基本情况是不递归,而是用不同的、通常是暴力或琐碎的方式解决问题。在合并排序的情况下,它可能是长度为0或1的子数组(因为它已经排序,您不必执行任何操作,只需返回即可)。您所说的“(除非是基本情况)。”?大多数合并排序的库实现都是插入排序和合并排序的变体,通常是插入排序和合并排序的混合,例如,Wikipedia称之为@EmilB对于递归算法,基本情况是不递归,而是用不同的、通常是暴力或琐碎的方式解决问题。在合并排序的情况下,它可能是长度为0或1的子数组(因为它已经排序,您不必做任何事情,只需返回)。