C 實現兩個有序陣列的合併

2022-10-03 23:30:19 字數 1157 閱讀 4942

劍指offer面試題5延展題:

問題:有兩個排序的陣列a1和a2,內存在a1的末尾有足夠多的空間容納a2。請實現乙個函式,把a2中所有數字插入a1中,並且所有的數字是排序(預設公升序)的。

思路:在合併兩個陣列(包括字串)時,從前往後複製每個數字(或字元)則需要重複移動數字(或字元)多次,則考慮從後往前複製就可以減少移動的次數,從而提高效率。

1.n1,n2分別指向陣列a1和a2的尾部,strnew指向合併後的陣列的尾部;

2.當陣列名是乙個程式設計客棧nullptr指標,或者a1陣列是乙個空陣列則返回;

3.當陣列a1[ida]>=a2[idb]或者idb程式設計客棧<0時,則複製ida指標所指的數到strnew指向的位置,ida向前移動1格,strnew向前移動1格;

4.當陣列a1[ida]

5.直到strnew<0則停止迴圈。

注意:輸入的n1,n2為陣列的長度,作指標時都要-1;

迴圈終止的條件從合併陣列指標入手,合併結束迴圈終止,即strnew<0;

注意形參和實參的傳遞,陣列傳入函式的三種宣告func(int *arr), func(int arr[n]), func(int arr),返回陣列指標的函式int * func( )

#include

#include

using namespace std;

int * insert(int *str1, int *str2, int n1, int n2,int length)

int strnew = n1 + n2 - 1;

int ida = n1-1;

int idb = n2-1;

while(strnew >= 0)

else if(str1[ida] < str2[idb] || ida<0)

} return st程式設計客棧r1;

//return dest;

}int main()

for(int i=0;i>b[i];

}www.cppcns.com

//int *c;

//c = insert(a, b, n1, n2, 100);

insert(a, b, n1, n2, 100);

for(int i=0;i

本文標題: c++實現兩個有序陣列的合併

本文位址:

合併兩個有序陣列 c

題目描述 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。說明 示例 輸入 nums1 1,2,3,0,0,0 m 3 nums2 2,5,6 n 3輸出 1,2,2,3,5,6 思路1 建立乙個新的向量陣列,很常規的乙個思...

合併兩個有序陣列C

題目描述 有兩個排序的陣列a1和a2,內存在a1的末尾有足夠的空餘空間容納a2。請實現乙個函式,把a2中的所有數字插入到a1中,並且所有的數字是排序的。思路分析 從尾到頭邊比較,邊移入正確的位置,時間複雜度為o n include using namespace std void combin2ar...

合併兩個有序陣列(C )

合併兩個有序陣列 思路兩個陣列都非空 記兩個陣列分別為v1,v2,合併後的陣列為vc,設定兩個指標i j分別指向陣列v1,v2,令i j 0,若v1 i v2 j 則可以一直新增v1的元素到合併後的陣列vc直到條件不滿足,同時修改i 新增v2的元素到vc 如果乙個陣列被遍歷完,則應該終止 新增未遍歷...