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

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

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

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

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

上述這種算法即是選擇排序法,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、面試技巧、生活感悟等。分享優質博文,技術乾貨,學習資源等優質內容。
歡迎關注,一塊兒學習,共成長!數組

相關文章
相關標籤/搜索