1.從前往後依次比較相鄰兩個元素,如果arr[j-1]>arr[j] ,則交換兩元素位置,直到len(arr)-1處停止,記錄最後發生交換的位置right=j
2.從前向後依次比較相鄰兩元素,若前乙個大於後乙個,則交換兩元素,直到right位置停止;若此時不發生元素交換,則演算法過程結束。
3.迴圈執行2過程,直到right<2 或不在發生元素交換。right=1時表明 index=0,和index=1處已經經過比較,即最先開始兩個元素已經經過比較。
演算法停止條件設定為不在發生元素交換可以減少演算法的迴圈次數。如下乙個長度為9的陣列,某次排序只需要迴圈4次。
演算法過程圖示:
氣泡排序原理(預設從小到大):
1.從前到後,相鄰的兩個元素相比較,如果arr[i]>arr[i+1],則兩個元素交換位置,直到len-巡迴次數處停止 ,記為第一次巡迴。此時最大的元素已經被選出排在了最後。
2.迴圈執行過程1,直到沒有元素發生交換
"""import random
def bubble_sort(arr):
length=len(arr)
right=length
need_sort=true
count=0
while right>=2 and need_sort:
count+=1
need_sort=false
for j in range(1,right):
if arr[j-1]>arr[j]:
arr[j-1],arr[j]=arr[j],arr[j-1]
right=j
need_sort=true
print("一共迴圈了:次".format(count))
return arr
if __name__ == "__main__":
arr=random.sample(range(20),9)
print("arr:",arr)
arr=bubble_sort(arr)
print("after sort:",arr)
"""
氣泡排序原理(預設從小到大):
1.從前到後,相鄰的兩個元素相比較,如果arr[i]>arr[i+1],則兩個元素交換位置,直到len-巡迴次數處停止 ,記為第一次巡迴。此時最大的元素已經被選出排在了最後。
2.迴圈執行過程1,直到沒有元素發生交換
"""import random
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
def autolabel(rects):
for rect in rects:
height = rect.get_height()
plt.text(rect.get_x()+rect.get_width()/2.-0.2, 1.00*height, '%s' % float(height))
def bubble_sort(arr):
#畫圖a=plt.bar(range(len(arr)),arr,color=cm.rainbow(np.array(arr)/25))
autolabel(a)
plt.ion()
plt.show()
plt.pause(0.2)
length=len(arr)
right=length
need_sort=true
count=0
while right>=2 and need_sort:
count+=1
need_sort=false
for j in range(1,right):
if arr[j-1]>arr[j]:
arr[j-1],arr[j]=arr[j],arr[j-1]
right=j
need_sort=true
#畫圖plt.cla()
a=plt.bar(range(len(arr)),arr,color=cm.rainbow(np.array(arr)/25))
autolabel(a)
plt.pause(1.5)
print("一共迴圈了:次".format(count))
return arr
if __name__ == "__main__":
arr=random.sample(range(20),9)
print("arr:",arr)
arr=bubble_sort(arr)
print("after sort:",arr)
排序演算法 氣泡排序
一.氣泡排序的過程 公升值排序 1.將第乙個記錄的關鍵字與第二個記錄的關鍵字進行比較,若key 1 key 2 則交換。然後比較第二個與第三個,依此類推,直到第n 1個與第n個比較為止,第一趟排序完後,記錄最大的關鍵字會被排在最後面。2.將記錄的前n 1個關鍵字進行第二趟比較交換,直到前n 1個中最...
排序演算法 氣泡排序
從基礎重新抓起。氣泡排序 每次從陣列頭到尾選出最大或者最小的,排到尾部或者頭部。以排序結果從小到大為例 每次從陣列中把最大的調換到末尾。eg.元素個數 count,需要找count 1次 外迴圈,最後一次不用再做比較了 每次從頭到末尾沒有確定的資料中找最大的 內迴圈 做法就是比較相鄰兩個元素的大小,...
排序演算法 氣泡排序
排序演算法是處理資料最基礎的演算法,掌握各種排序演算法有利以後遇到資料時的處理。首次學習,先學習氣泡排序。氣泡排序原理 對一組待排序資料x1,x2,x3,x4,x5,x6,x7.xn,氣泡排序演算法指標 這裡的指標並不是實際的指標,只是為方便而假象的乙個類似指標的東西 從第乙個資料開始,與其後面的乙...