自學python筆記 冒泡法排序2
阿新 • • 發佈:2018-09-04
bin 通過 pre 範圍 表示 控制 冒泡法 als wap
冒泡法排序延伸:
# !user/bin/python3 # -*- coding:utf-8 -*- # Author:Guo Zhengbing 18-9-3 import random ‘‘‘ 冒泡排序算法及其優化 冒泡排序的基本特征是只能交換相鄰的元素。 從下邊界開始,一趟掃描下來,可以把當前最大值頂到上邊界; 如果沒有發生交換操作,則表示數組是有序的。 ‘‘‘ # 算法一:基本冒泡排序 def BubbleSort_1(arr): # 外層循環累計排序輪數,同時控制待排序數組的上邊界,即A[0..i]為待排序部分 # 內層循環掃描A[0..i-1],比較相鄰元素,並通過交換元素值的方式將最大值頂到最上方for i in range(len(arr) - 1, 0, -1): for j in range(0, i): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] ‘‘‘ # 算法二:冒泡排序改進,設置交換操作標誌 def BubbleSort_2(arr): for i in range(len(arr) - 1, 0, -1): swapFlag = False # 先假設未做交換操作for j in range(0, i): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] swapFlag = True # 設置交互操作標誌 if not swapFlag: break # 無交換操作,表示已完成排序,退出循環 ‘‘‘ """ # 算法二:雙向冒泡(雞尾酒排序),因為未發生交換操作的區域是有序的,故每輪掃描下來可以更新上下邊界,減少掃描範圍 def BubbleSort_3(arr): low, high= 0, len(arr) - 1 while low < high: swapPos = low # 先假設最後一次發生交換操作的位置為low for j in range(low, high): # 順序掃描A[low..high-1] if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] swapPos = j high = swapPos # 修改待排序數組的上界為最後一次發生交換操作的位置 for j in range(high, low, -1): # 逆序掃描A[low+1..high] if arr[j] < arr[j - 1]: arr[j], arr[j - 1] = arr[j - 1], arr[j] swapPos = j low = swapPos # 修改待排序數組的下界為最後一次發生交換操作的位置 a = list(range(1, 10)) random.shuffle(a) print(a) BubbleSort_1(a) print(a) """
某位老哥的方法,引用學習
自學python筆記 冒泡法排序2