【Python】合併有序數組兩種方法

數組是程序設計語言的通用稱呼,在python裏,列表就是我們常說的數組(以下列表 = 數組)

目錄

1、用指針合併兩個有序數組(兩個都是有序的)

2、用sort函數合併兩個有序數組


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)

兩個方法都可以

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章