先放乙個**,可以看到冒泡,選擇,插入排序的過程 冒泡-選擇-插入排序
前言:二分法是乙個優化演算法,在乙個基於有序列表中,列表從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...