python 氣泡排序優化版,冒泡之雞尾酒排序

2021-09-27 13:03:31 字數 1433 閱讀 5407

思想:迴圈乙個序列,比較兩個相鄰的元素,當第乙個元素大於第二個元素時,交換兩個元素的位置,直到迴圈到最後乙個元素為止;

優化版氣泡排序: 

def optimization_bubble(collection):

for i in range(len(collection)):

flag = false

for j in range(len(collection) - i - 1):

if collection[j] > collection[j+1]:

collection[j + 1],collection[j] = collection[j],collection[j + 1]

flag = true

if not flag:

return collection

return collection

優化的地方在於減少迴圈次數,當排序列表在第二層迴圈中沒有符合條件,就意味著目前的列表已經是排好順序了,直接返回當前列表就可以了,優化前的氣泡排序則會一層層執行下去,直至第一層迴圈結束,附上優化前的氣泡排序**供參考;

原始氣泡排序:

def bubble_sort(collection):

for i in range(len(collection)):

for j in range(len(collection) - i -1):

if collection[j] > collection[j + 1]:

collection[j+1],collection[j] = collection[j],collection[j+1]

return collection

氣泡排序的最優版本又稱雞尾酒排序,也叫雙向氣泡排序等等,這是氣泡排序的一種變體,不同之處在於,氣泡排序從低到高序列裡的每個元素排序,而雞尾酒排序從兩個方向(低到高,高到底)來回排序,效率更高,**展示:

def cocktail_shaker_sort(sorted_list):

for i in range(len(sorted_list) - 1, 0, -1):

for j in range(i, 0, -1):

if sorted_list[j] < sorted_list[j - 1]:

sorted_list[j], sorted_list[j - 1] = sorted_list[j - 1], sorted_list[j]

for j in range(i):

if sorted_list[j] > sorted_list[j + 1]:

sorted_list[j], sorted_list[j + 1] = sorted_list[j + 1], sorted_list[j]

return sorted_list

氣泡排序優化版

優化 因為排序過程中,各元素不斷接近自己的位置如果一趟比較下來沒有進行交換,就說明序列有序,因此要在排序過程中設定乙個標誌flag判斷元素是否進行過交換。從而減少不必要的比較。實現 int arr int t 0 中間變數 boolean flag false 標誌當前迴圈是不是一次也沒進行交換,沒...

python 氣泡排序及優化版

coding utf 8 氣泡排序 import random print 氣泡排序 print 隨機生成乙個列表 list for i in range 8 num random.choice range 100 print list print 氣泡排序後 for i in range len ...

氣泡排序演算法(優化版)

include include include 排序用到的結構和函式 define maxsize 20 typedef struct sqlist 交換l中陣列r的下標為i和j的值 void swap sqlist l,int i,int j 氣泡排序 優化版 void bubblesort sq...