# 氣泡排序:二分查詢,每次都能夠排除一般的資料,查詢的效率非常高,但是侷限性比較大,必須是有序序列才可以使用二分查詢# lst = [88,5,8,6,1,23]
# for a in range(len(lst)): # 記錄內部排序的次數
# i = 0
# while i < len(lst) - 1: # 把最大值移動到右端
# if lst[i] > lst[i+1]: # 比較,
# lst[i], lst[i+1] = lst[i+1], lst[i] # 交換
# i = i + 1
# print(lst)
要求:查詢的序列必須是有序序列
while迴圈來進行二分查詢:
lst=[11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
n = 567
left = 0 #最左邊的元素的索引位置
right = len(lst) - 1 #最右邊的元素的索引位置
while left <= right: #判斷左右兩端的值,如果右邊的大於左邊就說明遍歷完成
middle = (left + right) // 2 #求中間值
if n
> lst[middle]: #如果我們要查詢的n大於中間值,說明n在序列的左邊
left = middle + 1 #下次查詢前就把左邊的值改成中間值右邊乙個值,也就是中間值加1的位置
elif n
< lst[middle]: #如果我們要查詢的n小於中間值,說明n在序列的左邊
right = middle - 1 #下次查詢前就把右邊的值改成中間值左邊乙個值,也就是中間值減1的位置
else: #如果我們要查詢的n等於中間值,直接找到,輸出結果並退出
print("存在")
print(middle)
break
else:
#否則就是不存在要查詢的那個值
print("不存在")
下面我們試試用遞迴的方法進行二分查詢:
lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
def binary_search(left, right, n):
middle = (left + right)//2
if left > right:
return -1
if n > lst[middle]:
left = middle + 1
elif n < lst[middle]:
right = middle - 1
else:
return middle
return binary_search(left, right,
n) #這一行的return是必須要加上的,否則接收到的結果將永遠是none
print(binary_search(0, len(lst)-1, 65) )
氣泡排序 二分查詢
include include include using namespace std int bsearch int t,int n,int x 二分查詢 return null inline void swap int a,int b void init int t,int n for int ...
氣泡排序 二分查詢
二分查詢 在label中無法顯示陣列 解決方法 string str 定義 字串str並賦初值 後 str str myarray i tostring 用str 接收已排序陣列再在label中顯示。剛開始寫二分查詢時找到分支 if sortarray mid num labelres.text 已...
氣泡排序和二分查詢
氣泡排序 public class bubblesorttest public static void bubblesort int array for int i 0 i array.length 1 i 其實此處可以換成i是最大的 for int j 0 j array.length i 1 j...