Python簡易的二分法和排序法

2021-09-29 03:46:04 字數 2377 閱讀 6286

排序演算法:

前提條件:

輸入的列表需要是有序的排布的,不可以是隨機分布值的集合。

背景:假設當前輸入的列表為乙個從小到大排序的集合,那麼需要實現再其中找乙個指定值,並返回其在列表中的索引位置。

普通方法:

使用此方法,當目標值的索引位越靠後時,需要執行的時間越長

def

get_index

(list

, target_num)

:# 使用for迴圈依次判斷

for item in

list

:if item == target_num:

target_index =

list

.index(item)

return target_index

list1 =[2

,4,6

,8,10

,12,14

,16,18

,19,20

]print

(get_index(list1,16)

)

二分法:

使用此方法,能迅速判斷出索引位

def

binary_search

(list

, target_num)

:# 定義起始和終止的索引位置

start_index =

0 end_index =

len(

list)-

1# 當最後的索引位一直大於等於起始索引位時,迴圈判斷

while start_index <= end_index:

# 中間的索引位以及索引位對應的值

mid_index =

(end_index + start_index)//2

mid_num =

list

[mid_index]

# 當中間位置就是目標值時,則返回該索引位

if mid_num == target_num:

return mid_index

# 當中間值大於目標值時,則賦值終止位為中間索引位-1,再進行下一輪判斷

if mid_num > target_num:

end_index = mid_index -

1# 當中間值小於目標值時,則賦值起始位位為中間索引位+1,再進行下一輪判斷

else

: start_index = mid_index +

1return

none

list1 =[2

,4,6

,8,10

,12,14

,16,18

,19,20

]print

(binary_search(list1,16)

)

前提條件:

輸入隨機數值的列表。

背景:假設當前輸入的列表為隨機數值的集合,那麼需要實現從小到大的排序,並返回乙個新的列表。

排序法:

# 定義乙個找出list中最小值的函式

deffind_small_index

(list):

# 取列表第乙個值和索引

small_list_0 =

list[0

] small_list_index =

0for i in

range(1

,len

(list))

:# 判斷,當從索引1開始取值,該值小於初始取值時,則

# 重新賦值給起始比較值的變數

iflist

[i]< small_list_0:

small_list_0 =

list

[i] small_list_index = i

return small_list_index

defselection_sort

(list):

# 定義乙個空列表,來接受從小到大的排序結果

new_list =

for i in

range

(len

(list))

:# 依次找出最小值,並加入到新的列表中

small_value = find_small_index(

list

)list

.pop(small_value)

)return new_list

a =[5,

3,8,

7,4,

9,6]

print

(selection_sort(a)

)

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法排序 Python實現

有乙個無序序列 37,99,73,48,47,40,40,25,99,51 先進行排序列印輸出,分別嘗試插入20 40 41 數值到序列中合適的位置,保證其有序。第一種實現,利用巢狀for迴圈,每次迭代出來的數值進行比較。如果比原表中的數值小,則插入到這個數左面。lst1 37,99,73,48,4...

氣泡排序法和二分法排序

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