原文連結: 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)
結果
最新評論