用Python寫乙個氣泡排序法

2021-10-03 04:20:40 字數 2149 閱讀 6278

用python寫氣泡排序法,首先要知道氣泡排序的原理,在乙個列表中順次拿出兩個資料比較大小,將大的往後排將小的往前排,如果一共有n個資料一共需要比較n-1次.

最笨的方法:

list_b=[1

,5,9

,7,6

,3,6

,4,4

,8,85

,69,78

,99]#例如有一串資料存放在列表

defbubble

(list1)

:#首先定義乙個氣泡排序功能的函式

for i in

range

(len

(list1)):

#遍歷列表

for j in

range

(len

(list1)-1

):if list1[j+1]

:#開始比較

list1[j]

,list1[j+1]

=list1[j+1]

,list1[j]

# 數值交換

print

(list1)

#列印結果

bubble(list_b)

#呼叫函式

# 結果[1, 3, 4, 4, 5, 6, 6, 7, 8, 9, 69, 78, 85, 99]

其實上個**多了許多次無用的比較,分析上面**,其實質是:

第一次比較出最大的數值放在了最後位,

第二次比較出了次大值,放在了倒數第二位,

第三次比較出第三大的數值放在倒數第三位…

既然如此,已經確定數值與位置的數就不需要再去比較了

即第一次比較得出最後一位的數值,比較了n-1次

第二次比較得出次大值放在倒數第二位不必再與最大值進行比較

第三處比較得出第三大值不必與最大值和次大值比較進行比較

所以找出規律,每次比較的次數字n-i-1,為什麼不是n-i,因為遍歷是從0開始的滴.

優化後的**:

list_b=[1

,5,9

,7,6

,3,6

,4,4

,8,85

,69,78

,99]def

bubble

(list1)

:for i in

range

(len

(list1)):

for j in

range

(len

(list1)-1

-i):

# 其他的都不變 只是這裡變成了-1-i

if list1[j+1]

: list1[j]

,list1[j+1]

=list1[j+1]

,list1[j]

print

(list1)

bubble(list_b)

#結果還是一樣的

還可以立個flag設定乙個變數為false,如果元素之間交換了位置,將變數重新賦值為true,最後再判斷,在一次迴圈結束後,變數如果還是為false,則break退出迴圈.

list_b=[1

,5,9

,7,6

,3,6

,4,4

,8,85

,69,78

,99]def

bubble

(list1)

:for i in

range

(len

(list1)-1

):flag =

false

for j in

range

(len

(list1)-1

- i)

:if list_b[j]

> list1[j +1]

: list1[j]

, list1[j +1]

= list1[j +1]

, list1[j]

flag =

true

ifnot flag:

break

return list1

print

(bubble(list_b)

)

用python寫乙個restful API

coding utf 8 package.module python實現的圖書的乙個restful api.restful api 一般模式 get select 從伺服器取出資源 一項或多項 post create 在伺服器新建乙個資源。put update 在伺服器更新資源 客戶端提供改變後的完...

用python的for迴圈寫氣泡排序

題目 利用for迴圈,完成a 1,7,4,89,34,2 的氣泡排序 氣泡排序 小的排前面,大的排後面。第一種 可以看到每次排序的結果 1 a 100,97,4,89,34,2 2 n 0 3for n in range 0,5 4for i in range 0,len a 1 5if a i a...

python寫乙個服務 Python寫乙個服務

coding utf 8 import json from urllib.parse import parse qs from wsgiref.server import make server 定義函式,引數是函式的兩個引數,都是python本身定義的,預設就行了。定義檔案請求的型別和當前請求成功...