排序之冒泡、插入和選擇

寫在前面:所有算法均爲 Python3 實現,關鍵是理解實現思路。

冒泡排序

冒泡排序只會操作相鄰的兩個數據。每次冒泡操作都會對相鄰的兩個元素進行比較,看是否滿足大小關係要求,如果不滿足就讓它倆互換。一次冒泡會讓至少一個元素移動到它應該在的位置,重複 n 次,就完成了 n 個數據的排序工作。

示意圖:

可以看到,只有第一次和第二次冒泡有變化,在沒有數據交換時,已經完成了排序,僅此在判斷無數據交換後,提前結束排序:

# coding=utf-8
​
def bubble_sort(l):
    l_len = len(l)
    if l_len <= 1:
        return
​
    for i in range(l_len):
        flag = False
        for j in range(l_len-1):
            if l[j] > l[j+1]:
                l[j],l[j+1] = l[j+1],l[j]
                flag = True
​
        if flag == False:
            break
​
    return l

插入排序

插入排序就是將數據分爲有序和無序兩部分,每次處理就是將無序的數列中第一個元素與有序數列的元素從後到前比較,找到插入位置,將該元素插入到有序數列的適當的最終的位置上。

示意圖:

實現:

# coding=utf-8
​
def insert_sort(l):
    l_len = len(l)
    if l_len <= 1:
        return
​
    for i in range(1,l_len):
        value = l[i]
        
        for j in range(i-1,-1,-1):
            if l[j] > value:
                l[j+1] = l[j]
                l[j] = value
            else:
                break
​
    return l

選擇排序

選擇排序算法的實現思路和插入排序類似,也分有序和無序兩部分。但是選擇排序每次會從未排序數列中找到最小的元素,將其放到已排序數列的末尾。

示意圖:

實現:

# coding=utf-8
​
def select_sort(l):
    l_len = len(l)
    if l_len <= 1:
        return
​
    for i in range(l_len):
        min_index = i
        for j in range(i+1,l_len):
            if l[j] < l[min_index]:
                min_index = j
​
        l[i],l[min_index] = l[min_index],l[i]
​
    return l

我是「Super於」,立志做一個每天都有正反饋的人!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章