【從0到1學算法】選擇排序

又到了算法時間,今天咱們來學第二種算法---選擇排序。這裏有個表格,記錄了樂隊及其做品的播放次數,以下:imagejava

要將它們按播放次數從多到少排序,要怎麼作呢?有一種方法是這樣子的,遍歷列表,找出播放次數最多的樂隊,將這個樂隊添加到一個新的列表中。imagepython

再次這樣作,找出第二多的樂隊。imagemysql

循環上述作法,最終即可獲得一個有序列表。imageweb

上述這種算法即是選擇排序法,n次遍歷列表選出最大/小進行排序。咱們用代碼來一遍唄。題目:對一個數組從小大排序面試

<pre mdtype="fences" cid="n48" lang="python" spellcheck="false" style="margin: 15px 0px; padding: 8px 4px 6px; max-width: 100%; overflow-wrap: break-word !important; box-sizing: border-box !important; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border-width: 1px; border-style: solid; border-color: rgb(231, 234, 237); border-radius: 3px; width: inherit;"># 找到最小值的索引 def find_smallest(arr):    smallest_index = 0    smallest = arr[smallest_index]    for i in range(1, len(arr)):        if arr[i] < smallest:            smallest_index = i            smallest = arr[i]    return smallest_index def quick_sort(arr):    new_arr = []    for i in range(len(arr)):        # 將最小值從原數組取出並加入新數組        smallest_index = find_smallest(arr)        new_arr.append(arr.pop(smallest_index))    return new_arr</pre>算法

還有另外一種寫法,爲了不內存浪費,咱們能夠不用新數組,直接在原數組裏面進行排序(這種也是比較常見的)sql

<pre spellcheck="false" lang="python" cid="n58" mdtype="fences" style="margin: 15px 0px; padding: 8px 4px 6px; max-width: 100%; overflow-wrap: break-word !important; box-sizing: border-box !important; color: rgb(51, 51, 51); font-size: 17px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; overflow: visible; font-family: var(--monospace); break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border-width: 1px; border-style: solid; border-color: rgb(231, 234, 237); border-radius: 3px; width: inherit;">def quick_sort(arr):    for i in range(len(arr)):       # 假設i是最小值的索引        smallest = i        # 遍歷數組,獲得真正最小值的索引        for j in range(i+1, len(arr)):            if arr[smallest] > arr[j]:                smallest = j# 當i爲最小值索引,便無需移動元素(i前面的已排好序)        if i == smallest:            pass        # 將最小值與arr[i]互換位置        # 通過這步後,i及i前面的都是已排好序的        else:            temp = arr[i]            arr[i] = arr[smallest]            arr[smallest] = temp    return arr</pre>數組

選擇排序怎麼記憶?關鍵在於選擇二字,選擇最大/小,而後呢,排序唄,再而後,重複選擇+排序就完事。學會了嗎?閉着眼睛寫寫唄~ps:對了,以前忘記說了,代碼語言用的是python,比較簡單易懂,會任何一門語言的人應該都能看懂。app


文章首發於公衆號【KEN DO EVERTHING】 本公衆號專一於java相關技術,但不限於java、mysql、python、面試技巧、生活感悟等。分享優質博文,技術乾貨,學習資源等優質內容。 歡迎關注,一塊兒學習,共成長!ide

相關文章
相關標籤/搜索