用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本身定義的,預設就行了。定義檔案請求的型別和當前請求成功...