又到了算法時間,今天咱們來學第二種算法---選擇排序。這裏有個表格,記錄了樂隊及其做品的播放次數,以下:java
要將它們按播放次數從多到少排序,要怎麼作呢?有一種方法是這樣子的,遍歷列表,找出播放次數最多的樂隊,將這個樂隊添加到一個新的列表中。python
再次這樣作,找出第二多的樂隊。mysql
循環上述作法,最終即可獲得一個有序列表。web
上述這種算法即是選擇排序法,n次遍歷列表選出最大/小進行排序。咱們用代碼來一遍唄。題目:對一個數組從小大排序面試
# 找到最小值的索引
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
還有另外一種寫法,爲了不內存浪費,咱們能夠不用新數組,直接在原數組裏面進行排序(這種也是比較常見的)算法
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
選擇排序怎麼記憶?關鍵在於選擇二字,選擇最大/小,而後呢,排序唄,再而後,重複選擇+排序就完事。學會了嗎?閉着眼睛寫寫唄~ps:對了,以前忘記說了,代碼語言用的是python,比較簡單易懂,會任何一門語言的人應該都能看懂。sql
文章首發於公衆號【KEN DO EVERTHING】
本公衆號專一於java相關技術,但不限於java、mysql、python、面試技巧、生活感悟等。分享優質博文,技術乾貨,學習資源等優質內容。
歡迎關注,一塊兒學習,共成長!數組