2.選擇排序和遞歸

現(xiàn)在有一個無序數(shù)組,需要把數(shù)組里面的數(shù)字按照從小到大的順序排列,我們可以怎么做?

比較簡單的一個方法是挨個去查看數(shù)組里面的數(shù)字,找到最小的一個數(shù)字,然后把找到的這個最小數(shù)字放進(jìn)一個新數(shù)組,接下來再去找原先數(shù)組里面剩下的數(shù)字中最小的數(shù)字,找到后再放入新數(shù)組的末尾,這樣一直操作到數(shù)組中的數(shù)字被找完為止。

這種方法就是選擇排序,不斷選擇最小的數(shù),然后進(jìn)行排序。

def find_smallest(arr):
    smallest = arr[0]
    index = 0
    for i in range(1, len(arr)):
        if smallest > arr[i]:
            smallest = arr[i]
            index = i
    return index


def selection_sort(arr):
    new_arr = []
    for _ in range(len(arr)):
        smallest_index = find_smallest(arr)
        new_arr.append(arr.pop(smallest_index))
    return new_arr

print(selection_sort([4, 1, 5, 3, 2, 8, 7, 6, 9]))

>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]

如果現(xiàn)在需要去一棵樹的頂端摘一個果子,一般是先爬到第一個樹干,然后再去第二個樹干,一直到樹的頂端,摘到果子后,還要從最靠近頂端的一個樹干,一個一個爬下來,遞歸和這個有點(diǎn)兒像。遞歸中有兩個條件,決定了這個遞歸是可執(zhí)行的,第一個是基線條件,在這里就是能夠在樹上摘到果子,第二個是遞歸條件,這里就是可以到達(dá)下一個樹干。這里還有一個棧的概念,就類似于爬的樹干,一個個爬上去,最后還得一個個爬下來。但是不一樣的是,棧的數(shù)據(jù)是一個個從壓進(jìn)去,然后從頂部一個個拿出來。

一個比較簡單的例子就是用遞歸來計算階乘,

def fact(x):
    if x == 1:
        return 1
    else:
        return x * fact(x-1)
print(fact(5))

>>>
120

可以看出,在計算過程中,把先計算出來的數(shù)放在一邊,直到最后達(dá)到基線條件時在一個個取出來繼續(xù)運(yùn)算。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 初級排序算法 排序算法關(guān)注的主要是重新排列數(shù)組元素,其中每個元素都有一個主鍵。排序算法是將所有元素主鍵按某種方...
    深度沉迷學(xué)習(xí)閱讀 1,595評論 0 1
  • 昨晚是除夕,萬家燈火,萬家團(tuán)圓,可是忽然就想起一句話,家是什么? 有一家三口人,都在外面打工,年底了,爸爸...
    冒牌文人閱讀 166評論 0 0
  • 張清的日精進(jìn)第46天 體驗(yàn)入 今天依據(jù)公司發(fā)展戰(zhàn)略和利潤指標(biāo)。完成了定崗,定人,定指標(biāo) 責(zé):職責(zé)和責(zé)任 權(quán):權(quán)限和...
    kiyoi2017閱讀 226評論 0 3
  • 束縛我的只有我的夢想束縛你的卻是你的韁繩 騎上我親愛的去尋找一個精神的彼岸 只有我靜止的時候你才可駕馭我當(dāng)我飛馳的...
    小春楊閱讀 159評論 0 0
  • (看家寶/看店寶) 支持語音對講、TF卡存儲、支持WIFI、多角度調(diào)節(jié)、IR-CUT切換、點(diǎn)陣紅外燈、移動偵測、手機(jī)遠(yuǎn)程
    蒙山小張閱讀 790評論 0 0

友情鏈接更多精彩內(nèi)容