排序演算法:
前提條件:
輸入的列表需要是有序的排布的,不可以是隨機分布值的集合。
背景:假設當前輸入的列表為乙個從小到大排序的集合,那麼需要實現再其中找乙個指定值,並返回其在列表中的索引位置。
普通方法:
使用此方法,當目標值的索引位越靠後時,需要執行的時間越長
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 使用快速排序法對陣列進行排序的原理 陣列元素進行樹狀分支,分結點比較大小,然後採用遞迴函式遞迴處...