1 氣泡排序

2021-10-22 08:40:32 字數 4235 閱讀 2113

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 則交換兩者的值。把最最小值冒泡至前面 根據判斷條件不同而不同 迴圈結束後,則是排序好的序列。我寫的程式是 每次都用前面的元素和後面的元素比較,若出現降序則交換。所以冒泡方式是,小的往前面移動。例如...