数据结构-选择排序方法
Data Structures - choosing sorting method
我有两个排序的数组A[],B[]。我的要求是合并这两个排序的数组,结果数组也应该以排序的方式。由于有2个排序的数组,我有2种方法来解决这个问题。一种是使用MERGE SORT方法,我可以排序&我建议的另一个方法是简单地连接这两个数组,并通过快速排序方法对结果数组进行排序。
我的问题是在以上两种方法中,哪一种方法效率更高,运行时间更短,更稳定。请给我建议&如果还有其他解决方案,请告诉我。
对于预排序数组,最简单的方法应该是类似的方法
int A[50];
int B[50];
int C[100];
std::merge(std::begin(A), std::end(A), std::begin(B), std::end(B), std::begin(C));
或者,如果您使用std::array
的
std::array<int, 50> A;
std::array<int, 50> B;
std::array<int, 100> C;
std::merge(A.begin(), A.end(), B.begin(), B.end(), C.begin());
合并两个预排序数组只需要O(N)
时间和O(N)
额外空间,其中N = n + m
。这里CCD_ 5和CCD_。
在上面的情况下,如果两个数组最初未排序,则必须分别按O(nlogn)
和O(mlogm)
时间对它们进行排序。然后将它们合并需要另一个O(N)
时间,从而渐近地得到总O(max(m, n) log max(m, n))
时间。
另一方面,如果您将两个数组连接起来,并应用任何第一个排序算法,如快速排序(C++的sort(..)
),则时间复杂度将为O(NlogN)
,并具有O(N)
的额外空间。
因此,就时间复杂性而言,我认为您应该使用合并排序的合并方法,因为您的两个数组最初是排序的。
不使用类,即纯C:
void merge(int A[], int B[], int C[])
{
int a, b, c;
a= b= c= 0;
while (a<50 && b<50) {
if (A[a] < B[b])
C[c++]= A[a++];
else C[c++]= B[b++];
}
while (a<50) C[c++]= A[a++];
while (b<50) C[c++]= B[b++];
}
相关文章:
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 有没有更好的方法对C++中的三个整数进行排序?
- 获取位于特定区间的已排序值列表的子列表的最短方法
- 在 C++ 中,以相反顺序排序的最快方法是什么?
- 迭代快速排序方法的分区算法问题
- 查看数字是否包含在未排序的双数字间隔内的最有效方法?
- 多次对容器进行排序,使用什么容器和什么方法
- 随机化超大文件内容排序的有效方法是什么?
- 相对于另一个向量对一个向量进行排序 - 最有效的方法
- 我刚刚创建了一个非常快速的素数排序方法.如何改进?
- 在排序静态数组中搜索的最快方法
- 对这些 n^2 个数字进行排序的最快方法是什么
- 当有多个查询时,检查某些子数组是否排序的有效方法是什么?
- C++基数排序的有效方法
- 从排序的数字数组中返回数字范围的最快方法是什么?
- 改善并行bitonic排序的更好方法
- 模板集合的不同排序方法
- 根据这些字符串输入在句子中的位置对这些字符串输入进行排序的更快方法是什么
- STL 中的排序方法不能交换向量中的内容
- 在C std :: Priority_queue中反向字母排序顺序的简单方法