Python 合併有序陣列兩種方法

2021-09-27 12:09:54 字數 1655 閱讀 1777

陣列是程式語言的通用稱呼,在python裡,列表就是我們常說的陣列(以下列表 = 陣列)

目錄

1、用指標合併兩個有序陣列(兩個都是有序的)

2、用sort函式合併兩個有序陣列

先看下面兩個陣列

arr1 = [1 , 3 , 4 , 6  ,10]

arr2 = [2 , 5 , 8 ,11]

先了解下思路,我們運用的方法是將某乙個陣列加入到另乙個陣列中去,接下來詳細看:(這裡arr2加入到arr1中)

首先 拿出2與arr1中的第乙個元素比較,2比1大,那麼在再比較arr1的下乙個元素,2比3小,則2加入1後面3前面的位置,同時3後面的元素都要向後移動乙個位置。那麼5,8,11以此類推,值得注意的是,由於兩個都是有序陣列,那麼2比1大,arr2的第二個元素就沒有必要與1比較了,5直接與3比較即可,後面繼續比較。最後如果11後還有很多元素,那麼既然11都比arr1的最後乙個元素大了,其後的元素一定比10大,直接加入到11後即可。將過程轉換為程式:

#用指標合併兩個有序陣列.py

arr1 = [1,3,4,6,10] #初始化兩個陣列

arr2 = [2,5,8,11]

ans = arr1.copy() #承載排序後的陣列

ind = 0 #ind是作為第乙個陣列的下標的

for i in range(0,len(arr2)): #遍歷第二個陣列的每乙個元素

while ind < len(arr1): #ind是作為第乙個陣列的下標的,並且不超過第乙個陣列的最大下標

if arr2[i] <= arr1[ind]:#這裡沒有用for迴圈遍歷第乙個陣列

#是因為要考慮不止有乙個元素要插入到某兩個元素之間的情況

ans.insert(ind + i , arr2[i])

#向第乙個陣列中的合適位置插入第二個陣列中的數

break

else:

ind += 1 #如果ind指向的數(即arr1中的下標為ind的數)比i指向的數(即arr2

#中下標為i的數) 小,則ind向後移一位,跟arr1中的下乙個數比較

else:

ans = ans + arr2[i:] #如果arr1中的數已經被遍歷完了,那麼將arr2中剩下的數直接加在arr1

#最後就可以了

break

print(ans)

這是運用模擬指標完成了兩個有序陣列的合併,還有就是為什麼不用arr1直接儲存改動後的陣列,是因為如此的話會丟失arr1中的元素,但是用ans儲存,呼叫arr1中的元素與arr2中的元素去比較,就有效避免了這個問題

這個方法是更簡單的,但是用的時間更長一些

arr1 = [1,3,4,6,10]

arr2 = [2,5,8,11]

ans = arr1 + arr2

ans.sort() #預設使用公升序

print(ans)

兩個方法都可以

合併有序陣列

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 給你兩個有序且公升序的陣列,請你把它們合成乙個公升序陣列並輸出 give you two ordered ascending array,you put them into one ascending array and ou...

合併有序陣列

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

合併有序陣列

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