首頁>技術>

原文連結: https://segmentfault.com/a/1190000038694491

1.氣泡排序

氣泡排序是一種交換排序。

什麼是交換排序呢?

交換排序:兩兩比較待排序的關鍵字,並交換不滿足次序要求的那對數,直到整個表都滿足次序要求為止。

程式碼示例:

結果:

從結果中看出,其實在第3次時,就已經完成了排序,之後的迭代只是在浪費時間,所以可以最佳化下。

程式碼示例:

結果

2.直接排序

原理:

在未排序序列中,構建一個子排序序列,直至全部資料排序完成。

將待排序的數,插入到已經排序的序列中合適的位置。

增加一個哨兵,放入待比較值,讓它和後面已經排序好的序列比較,找到合適的插入點。

程式碼示例

結果:

3.簡單選擇排序

簡單選擇排序是一種選擇排序。

選擇排序:每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。

程式碼示例

def simple_select_sort1(demo:list):    """    簡單選擇排序    :param demo:    :return:    """    length = len(demo)    for i in range(length):        maxindex = i        for j in range(i + 1, length):            if demo[maxindex] < demo[j]:                maxindex = j        if i != maxindex:            demo[i], demo[maxindex] = demo[maxindex], demo[i]        print("{}次{}".format(i, demo))    print("最終排序".format(demo))def simple_select_sort2(demo:list):    """    最佳化後簡單選擇排序    :param demo:    :return:    """    length = len(demo)    for i in range(length // 2):        maxindex = i        minindex = -i - 1        minorgin = minindex        for j in range(i + 1, length - i):            if demo[maxindex] < demo[j]:                maxindex = j            if demo[minindex] > demo[-j - 1]:                minindex = -j - 1        if i != maxindex:            demo[i], demo[maxindex] = demo[maxindex], demo[i]            if i == length + minindex:                minindex = maxindex        if minorgin != minindex:            demo[minorgin], demo[minindex] = demo[minindex], demo[minorgin]        print("{}次{}".format(i, demo))    print("最終排序{}".format(demo))if __name__ == '__main__':    num_list = [33, 4, 15, 2, 72, 57, 9, 52, 90, 55]    simple_select_sort1(num_list)    print("*" * 40)    simple_select_sort2(num_list)

結果

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 學習Python之面向物件補充