1. 程式人生 > >自學python筆記 冒泡法排序2

自學python筆記 冒泡法排序2

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