它重複地遍歷要拍學的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
氣泡排序演算法的運作如下:
####第一種方法
defbubble_sort(alist):
for j in range(len(alist)-1,0,-1):
#j表示每次遍歷需要比較的次數,是逐漸減小的
for i in
range(j):
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
if__name__ == "
__main__":
li = [54,25,93,17,77,31,44,55,20,10]
(li)
bublle_sort(li)
print(li)
#首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。###第二種方法
defbublle_sort(alist):
"""氣泡排序
"""n =len(alist)
for j in range(n - 1):
count =0
for i in range(0, n - 1 -j):
#從頭走到尾
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
count += 1
if 0 ==count:
#如果沒有進行交換,說明已經排序完成不需要再進行下去
break
if__name__ == "
__main__":
li = [54,25,93,17,77,31,44,55,20,10]
(li)
bublle_sort(li)
print(li)
選擇排序的主要優點與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有乙個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。
記錄最小值的下標
for i in range(j+1, n-1): #
從i+1這個位置到末尾中選出最小資料
if alist[min_index] >alist[i]:
min_index =i
alist[j], alist[min_index] =alist[min_index],alist[j]
#交換在退出內層迴圈時執行
if__name__ == "
__main__":
li = [3,2,1,7,8,9,75]
(li)
select_sort(li)
print(li)
資料結構 PHP 選擇排序 氣泡排序
選擇排序和氣泡排序時間複雜度都屬於o n 2 級別的排序演算法,由於它實現起來比較簡單,在不考慮效能的簡單情景下,可以優先考慮。選擇排序的原理就是每迴圈一次就挑出最小的那個 假設從小到大排 然後記住最小位置的那個索引,把它安排到最前面去,已經排過的位置就往後排,以此類推達到選擇排序的目的 從小到 擇...
資料結構之冒泡 選擇排序
氣泡排序和選擇排序都屬於內部排序,這兩種排序方式的平均時間複雜度和最壞時間複雜度都是 一 氣泡排序 氣泡排序是對待排序序列下標有小到大開始遍歷比較,若這兩個元素逆序,則交換,不逆序則繼續比較一下乙個,比較陣列長度 1趟即可。若是某一趟沒有交換,則證明這個陣列序列有序,退出即可。如下 氣泡排序 每一趟...
C 資料結構 氣泡排序
include typedef int infotype typedef enum boolean define n 5 假設的檔案長度,即待排序的記錄數目 typedef int keytype 假設的關鍵字型別 typedef struct rectype typedef rectype seq...