冒泡 選擇排序與二分查詢

2021-10-09 14:14:03 字數 3108 閱讀 2944

相鄰比較,逆序交換

# 如果某一趟排序,沒有 傳送任何 交換, 證明資料已經有序, 可以結束排序

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...