氣泡排序,二分查詢

2022-09-01 06:42:08 字數 1602 閱讀 9335

# 氣泡排序:

# 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...