合并两个有序数组(C++版)

来源:互联网 发布:java命名规则 编辑:程序博客网 时间:2024/05/02 19:09

题目:

两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。

请编写一个方法,将B合并入A并排序。

给定两个有序int数组AB,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。


思路:从后向前逐个比较填充A数组。


贴代码:

int cmpMax(int a, int b){return (a > b) ? a : b;}// n为数组A的真实长度// m为数组B的真实长度int* mergeAB(int* A, int* B, int n, int m) {int max = cmpMax(A[n - 1], B[m - 1]);int mxlen = cmpMax(n, m);int Adx = n - 1;int Bdx = m - 1;int cnt = n + m - 1;while (cnt >= 0){// 从后往前填充if (Adx >= 0 && Bdx >= 0){A[cnt] = cmpMax(A[Adx], B[Bdx]);if (A[cnt] == A[Adx]){Adx--;}else if (A[cnt] == B[Bdx]){Bdx--;}}else if(Adx < 0){A[cnt] = B[Bdx--];}else if(Bdx < 0){A[cnt] = A[Adx--];}cnt--;}return A;}

0 0