又到了算法時間,今天咱們來學第二種算法---選擇排序。這裏有個表格,記錄了樂隊及其做品的播放次數,以下:java
要將它們按播放次數從多到少排序,要怎麼作呢?有一種方法是這樣子的,遍歷列表,找出播放次數最多的樂隊,將這個樂隊添加到一個新的列表中。python
再次這樣作,找出第二多的樂隊。mysql
循環上述作法,最終即可獲得一個有序列表。web
上述這種算法即是選擇排序法,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