相鄰比較,逆序交換
# 如果某一趟排序,沒有 傳送任何 交換, 證明資料已經有序, 可以結束排序
defbubble_sort
(alist)
: n =
len(alist)
# 列表中元素個數
# 氣泡排序, n個數字需要 排序 (n-1) 趟
for i in
range(1
, n)
:# 在每一趟排序之前,設定乙個標誌
flag =
false
for j in
range(0
, n - i)
:# 每一趟排序結束之後,就減少乙個需要比較的元素
if alist[j]
> alist[j +1]
:# 相鄰比較,逆序交換
alist[j]
, alist[j +1]
= alist[j +1]
, alist[j]
# 發生交換,改變標誌
flag =
true
if flag is
false
:# 說明這一趟排序沒有發生任何交換
break
return alist
alist =[2
,5,8
,11]r = bubble_sort(alist)
print
(r)
# 定義乙個函式, 接收乙個列表作為引數,返回乙個列表
# 定義乙個裝飾器,在裝飾器中對列表進行排序, 使用冒泡公升序排序
# self 一般用在 類中的例項方法裡的形參,指例項化物件本身
# cls 一般用在類方法裡的形參,指類本身
defouter
(func)
:def
inner
(alist)
:# 在裝飾器中 對 引數 公升序排序
n =len(alist)
for i in
range(1
, n)
:# n個元素比較 n-1 趟
for j in
range(0
, n - i)
:# 需要比較的數字下標
if alist[j]
> alist[j +1]
:# 相鄰比較,逆序交換
alist[j]
, alist[j +1]
= alist[j +1]
, alist[j]
r = func(alist)
return r
return inner
@outer
deffunc
(alist)
:return alist
r = func([1
,4,2
,9])
print
(r)
每一趟找到乙個最小值,然後和 假設的 那個最小值 交換
def
select_sort
(alist)
:
n =len(alist)
# n個元素
for i in
range(1
, n)
:# n-1 趟排序
# 第 i 趟 排序
min_index = i -
1# 假設 最小值 下標
for j in
range
(i, n)
:# 在後面的數字中,如果出現乙個比假設的最小值還要小的數字, 也就是說 如果 alist[j] 更小
if alist[min_index]
> alist[j]
:# 只更新最小值下標,保證 min_index 存的 始終是真正的最小值下標
min_index = j
# 說明後面有比假設的最小值 還小的數字, 把 假設的最小值和 真正的最小值 交換
if min_index != i -1:
alist[i -1]
, alist[min_index]
= alist[min_index]
, alist[i -1]
return alist
alist =[2
,7,5
,4,2
]alist = select_sort(alist)
print
(alist)
查詢: 在 一定的範圍內,判斷 某個元素 是否存在
折半查詢的前提是:資料已經有序
## 前提是資料有序,且為 公升序
deffind
(num, alist)
: n =
len(alist)
start =
0# 開始下標
end = n -
1# 結束下標
# 始終保證 開始的下標 不能大於 結束的下標
while start <= end:
mid =
(start + end)//2
# 中間值下標
if num > alist[mid]
:# 如果比中間值元素 大, 去中間值之後的範圍查詢, 開始的下標需要更新為 mid+1
start = mid +
1elif num < alist[mid]
:# 如果比中間值元素 小, 去中間值之前的範圍查詢, 結束的下標需要更新為 mid-1
end = mid -
1else
:# 中間值和要查詢的數字 正好相等
return
true
# 如果迴圈走完,也沒有找到,返回false
return
false
alist =[1
,5,7
,23]num =
77r = find(num, alist)
print
(r)
氣泡排序,選擇查詢,二分搜尋
1.氣泡排序 將無序陣列裡的每個數字進行大小比較,變為公升序陣列。首先將a 1 與a 2 進行比較,若a 1 a 2 則將兩個元素交換位置,然後比較a 2 和a 3 以此類推,直到a n 1 和a n 進行比較為止。上述過程為第一趟,其結果使得最大的元素被安置到最後乙個位置。然後進行第二趟排序,對前...
氣泡排序,選擇排序,二分查詢小結
我們知道,排序方法很多 氣泡排序,選擇排序,快速排序,希爾排序。今天,我將就我的了解來作出介紹 氣泡排序 氣泡排序是一種較為簡單的排序方法,它主要思路是遍歷所有的資料,一次比較兩個數,如果它們的順序是我們所要求的,就不變化 如果它們的大小順序和我們的要求相左,則進行交換。重複遍歷,直到沒有資料需要交...
氣泡排序 選擇排序 簡單二分查詢
1 氣泡排序 關於氣泡排序,其實就是相鄰兩兩對比,正序反序,大的 小的 往後挪乙個位置,第一遍最大 最小 肯定會在最後了,然後第二次排序不計最後乙個元素進行重排,然後以此類推 public static void main string args for int i 0 iscore j 1 for...