數組是程序設計語言的通用稱呼,在python裏,列表就是我們常說的數組(以下列表 = 數組)
目錄
1、用指針合併兩個有序數組(兩個都是有序的)
先看下面兩個數組
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中的元素去比較,就有效避免了這個問題
2、用sort函數合併兩個有序數組
這個方法是更簡單的,但是用的時間更長一些
arr1 = [1,3,4,6,10]
arr2 = [2,5,8,11]
ans = arr1 + arr2
ans.sort() #默認使用升序
print(ans)
兩個方法都可以