兩個已排序陣列的合併 C語言

2021-07-30 09:12:30 字數 1537 閱讀 9148

最近在紙上寫乙個已排序陣列的合併時,花了超過預期的時間。仔細想想,這種要放到畢業找工作那會兩下就出來了,原因還在於工作後對基礎沒有重視,疏於練習。

說開一點,現在搜尋引擎的發達確實給問題的解決帶來了便利,但是久而久之,對很多東西的掌握其實並不深入。比如**系的人經常分享一些linux核心io優化相關的內容,咋看一下,原來是這樣,覺得也不難嘛,其實不然,如果給一張白紙讓你自己把流程畫出來,講解清楚,還有有難度的。這裡問題的關鍵在於很多時候我們只是通過網際網路的便利了解某個東西,實際上並不掌握它。

紙上得來終覺淺,絕知此事要躬行。古人早就把道理告訴了我們,只是知易行難而已。

現在it界新語言、新概念層出不窮,我也很喜歡玩這些新的東西並樂在其中,不過基礎始終很重要。

回到正題,以後盡量養成動手的習慣,不管東西大小,內容高深與否,都自己實際過一遍,在部落格裡記錄下來。

問題:將兩個已排序陣列合併成乙個排序陣列

這裡先不考慮大資料量的情況(在資料量很大時不知大家有什麼好的思路或方法?),只做簡單陣列的處理。

簡單**如下:

說明:之所以把merge函式定義成返回陣列長度,是因為後續會有重複資料合併功能的merge版本,考慮到介面一致性。

#include #include #include int merge(int* ar1, int len1, int* ar2, int len2, int** rtn)

/*++

description:

this routine merge two sorted arrays into one sorted array,

the same values in different arrays will be keeped.

arguments:

ar1 - the first sorted array to be merged

len1 - the num of items in ar1

ar2 - the second sorted array to be merged

len2 - the num of items in ar2

rtn - the caller proviced pointer to get the result array,

memory allocated for rtn should be free by the caller.

return value:

the num of items in the merge array

--*/

*rtn = (int *)malloc((len1+len2)*sizeof(int));

if(*rtn == null)

memset(*rtn, 0, (len1+len2)*sizeof(int));

res = (int*)*rtn;

while(i%8d\n", i++, *ptr++); }

if (a3 != null)

return 0;

}int main(int argc, char* argv)

合併兩個已排序的陣列

題目描述1 有兩個排序的陣列a1和a2,內存在a1的末尾有足夠多的空餘空間容納a2。請實現乙個函式,把a2中的所有數字插入a1中,並且所有的數字是排序的。void mergelist int la,int a length,int lb,int b length for int i 0 i a le...

165 合併兩個排序陣列

原題 您在真實的面試中是否遇到過這個題?是 標籤鍊錶 思路 逐個比較l1與l2的結點,將較小的掛載在結果鍊錶上。小技巧 可以建立乙個資料無效的結點作為標誌頭節點,返回其next。ac definition of singly linked list class listnode class solu...

88 合併兩個有序陣列(C語言)

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。說明 初始化 nums1 和 nums2 的元素數量分別為 m 和 n 你可以假設 nums1 有足夠的空間 空間大小大於或等於 m n 來儲存 nums2 中的元素。示例...