二分法和氣泡排序

2021-09-27 08:32:53 字數 2141 閱讀 2761

先放乙個**,可以看到冒泡,選擇,插入排序的過程 冒泡-選擇-插入排序

前言:二分法是乙個優化演算法,在乙個基於有序列表中,列表從1到10000,如果要找乙個8899的數字,不用二分法的話,就是迴圈從一到10000,直到找到8899.但是,有沒有想過,前5000個都比8899小,所以能不能直接第一次就判斷哪些值小於我需要的值呢?

二分法就是基於這樣的場景出現的,一次砍掉一半數字,相對於億萬資料的,效能的優化不是一點半點。

它的時間複雜度是o(logn)

**實現

def

binary_search

(li, n)

: low =

0# 定義開始迴圈的索引

high =

len(li)-1

# 定義最後乙個索引

while low <= high:

mid =

(low + high)//2

# 算出開始索引和最後索引的相對中間位置

if li[mid]

== n:

# 如果這個索引代表的值就是查詢的值,直接返回

return mid

elif li[mid]

< n:

# 判斷中間的這個值是否小於n(查詢的值),如果小於n,說明這個值在所有為mid的右邊,這時需要左邊的low向前進一

low = mid +

1else

:# 反之,右邊的索引往mid左邊走,就是mid-1

high = mid -

1return

-1

遞迴版本
def

bin_search_rec

(data_set, value, low, high)

:if low <= high:

mid =

(low + high)//2

if data_set[mid]

== value:

return mid

elif data_set[mid]

> value:

return bin_search_rec(data_set, value, low, mid-1)

else

:return bin_search_rec(data_set, value, mid+

1, high)

else

:return

氣泡排序思想

讓陣列當中相鄰的兩個數進行比較,陣列當中比較小的數值向下沉,數值比較大的向上浮!外層for迴圈控制迴圈次數,內層for迴圈控制相鄰的兩個元素進行比較。

給定乙個n個元素的陣列,冒泡法排序將:

如果元素大小關係不正確,交換這兩個數(在本例中為a> b),

比較一對相鄰元素(a,b),

重複步驟1和2,直到我們到達陣列的末尾(最後一對是第(n-2)和(n-1)項,因為我們的陣列從零開始)

到目前為止,最大的元素將在最後的位置。 然後我們將n減少1,並重複步驟1,直到n = 1。

def

bubble_sort

(li)

:for i in

range

(len

(li)):

for j in

range

(len

(li)

-i-1):

if li[j]

> li[j+1]

: li[j]

,li[j+1]

= li[j+1]

, li[j]

def

bubble_sort

(li)

:for i in

range

(len

(li)):

false

for j in

range

(len

(li)

-i-1):

if li[j]

> li[j+1]

: li[j]

, li[j+1]

= li[j+1]

, li[j]

true

ifreturn

氣泡排序 二分法

核心 掐頭去尾取中間.一次砍一半 二分查詢.每次能夠排除掉一半的資料.查詢的效率非常高.但是侷限性比較大.必須是有 序序列才可以使用二分查詢 兩種演算法 常規迴圈,遞迴迴圈 使用二分法可以提高效率,前提條件 有序序列 lst 22,33,44,55,66,77,88,99,101 238 345 4...

氣泡排序法和二分法排序

使用氣泡排序法對陣列進行排序的原理 陣列元素兩兩比較大小 function func arr print r arr arr array 0,11,2,3,24,5,16,7,48,9 func arr 使用快速排序法對陣列進行排序的原理 陣列元素進行樹狀分支,分結點比較大小,然後採用遞迴函式遞迴處...

氣泡排序和二分法查詢

1.氣泡排序 int arr for int i 0 iarr j 1 for int a arr 執行結果 2.二分法查詢 乙個陣列,輸入乙個數字,查詢該數字在陣列中的下標。如果找不到,返回 1 int arr scanner in new scanner system.in system.out...