思想:迴圈乙個序列,比較兩個相鄰的元素,當第乙個元素大於第二個元素時,交換兩個元素的位置,直到迴圈到最後乙個元素為止;
優化版氣泡排序:
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...