1 、氣泡排序
氣泡排序是排序演算法中較為簡單的一種,英文稱為bubble sort。它遍歷所有的資料,每次對相鄰元素進行兩兩比較,如果順序和預先規定的順序不一致,則進行位置交換;這樣一次遍歷會將最大或最小的資料上浮到頂端,之後再重複同樣的操作,直到所有的資料有序。
2、演算法步驟
比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
針對所有的元素重複以上的步驟,除了最後乙個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
**3.**如果有n個資料,那麼需要o(n
2)
o(n^)
o(n2
)的比較次數,所以當資料量很大時,冒泡演算法的效率並不高。
當輸入的資料是反序時,花的時間最長,當輸入的資料是正序時,時間最短。
平均時間複雜度:o(n
2)
o(n^)
o(n2
)
空間複雜度:o(1
)o(1)
o(1)
**:
# # def bubblesort
(arr)
:# # for i in
range(1
,len
(arr)):
# # for j in
range(0
,len
(arr)
-i):
# # if arr[j]
> arr[j+1]
:# # arr[j]
, arr[j +1]
= arr[j +1]
, arr[j]
# # return arr
實現冒泡法排序時要考慮時間複雜度和空間複雜度是靠近o(1) ,還是接近o(n),甚至是o(n²),時間複雜度大的演算法會增加計算機執行負荷,效率低下。盡量寫出時間複雜度小的演算法
用乙個 flag 引數記錄新一輪的排序中元素是否做過交換,如果沒有,說明前面參與比較過的元素已經是正序,那就沒必要再從頭比較了
改進**
def bubblesort
(arr)
: n =
len(arr)
# 遍歷所有陣列元素
for i in
range(0
, n)
: flag = true
# last i elements are already in place
for j in
range(0
, n - i -1)
:if arr[j]
> arr[j +1]
: arr[j]
, arr[j +1]
= arr[j +1]
, arr[j]
flag = false
if flag: # 如果假設成立,則結束交換
break
實驗**:
# '''
# 1.氣泡排序
# '''
# # def bubblesort
(arr)
:# # for i in
range(1
,len
(arr)):
# # for j in
range(0
,len
(arr)
-i):
# # if arr[j]
> arr[j+1]
:# # arr[j]
, arr[j +1]
= arr[j +1]
, arr[j]
# # return arr
# ########################例項輸入##########################
# def bubblesort
(arr)
:# n =
len(arr)
# # 遍歷所有陣列元素
# for i in
range(0
, n)
: # for j in
range(0
, n - i -1)
:# if arr[j]
> arr[j +1]
:# arr[j]
, arr[j +1]
= arr[j +1]
, arr[j]
## #num =[64
,34,25
,12,22
,11,90
]## ####輸入不定長陣列######
# arr =
input(''
) #輸入乙個一維陣列,每個數之間使空格隔開
# num =
[int
(n)for n in arr.
split
(' '
)] #將輸入每個數以空格鍵隔開做成陣列
# #print
(num) #列印陣列
## bubblesort
(num)
# print
("排序後的陣列:"
)# for i in
range
(len
(num)):
# print
("%d"
%num[i]
)'''
優化後的冒泡演算法
實現冒泡法排序時要考慮時間複雜度和空間複雜度是靠近o(1
),還是接近o
(n),甚至是o
(n²)
,時間複雜度大的演算法會增加計算機執行負荷,效率低下。盡量寫出時間複雜度小的演算法
'''def bubblesort
(arr)
: n =
len(arr)
# 遍歷所有陣列元素
for i in
range
(n):
flag = true
# last i elements are already in place
for j in
range(0
, n - i -1)
:if arr[j]
> arr[j +1]
: arr[j]
, arr[j +1]
= arr[j +1]
, arr[j]
flag = false
i +=
1 #print
(i) #print
("共迴圈%d次"
% i)
if flag: # 如果假設成立,則結束交換
break
print
("共迴圈%d次"
% i)
#num =[64
,34,25
,12,22
,11,90
]####輸入不定長陣列######
arr =
input(''
) #輸入乙個一維陣列,每個數之間使空格隔開
num =
[int
(n)for n in arr.
split
(' '
)] #將輸入每個數以空格鍵隔開做成陣列
#print
(num) #列印陣列
bubblesort
(num)
print
("排序後的陣列:"
)for i in
range
(len
(num)):
print
("%d"
%num[i]
)
排序(1) 氣泡排序
排序演算法是經久不衰的經典入門演算法,一般認為是,給定一組數,給出從小到大排序的結果。主要演算法有 選擇,插入,冒泡,歸併,希爾,基數,快速,桶排序等等。每種排序有其自身的特性,適合不同的場景。分析排序演算法主要從3個方面 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣...
排序 1 氣泡排序
目錄 1.什麼是氣泡排序 2.氣泡排序的關鍵點 3.氣泡排序應用 假設待排序列為9 6 4 2 7 8 5 3 1,要求是讓待排序列按遞增順序排列。氣泡排序就是對待排序列掃瞄一次,就可以使得最大的9就位。具體過程排序過程是 先9和6比較,比6大所以位置互換得到6 9 4 2 7 8 5 3 1,然後...
1 氣泡排序
氣泡排序 這裡採用公升序排序 是不斷比較臨近的兩個元素大小,若出現兩個元素為降序的 l i l i 1 則交換兩者的值。把最最小值冒泡至前面 根據判斷條件不同而不同 迴圈結束後,則是排序好的序列。我寫的程式是 每次都用前面的元素和後面的元素比較,若出現降序則交換。所以冒泡方式是,小的往前面移動。例如...