氣泡排序,二分法查詢

2022-05-02 17:30:08 字數 1793 閱讀 7680

lst = [18, 8, 16, 2, 5, 7]

# 通過交換的方式. 把列表中最大的值一定到最右端

for abc in range(len(lst)): # 控制內部移動的次數

n = 0

while n < len(lst)-1:

if lst[n] < lst[n+1]:

lst[n], lst[n+1] = lst[n+1], lst[n]

n = n + 1

print(lst)

#

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789 ]

#n = 79

#for el in lst:

#if el == n: # o(1)

#print("找到了")

#break

#else:

#print("沒有")

#使用二分法可以提高效率, 前提條件:有序序列

#lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]##

n = 88##

#left = 0

#right = len(lst)-1##

while left <= right: # 邊界, 當右邊比左邊還小的時候退出迴圈

#mid = (left + right)//2 # 必須是整除. 因為索引沒有小數

#if lst[mid] > n:

#right = mid - 1

#if lst[mid] < n:

#left = mid + 1

#if lst[mid] == n:

#print("找到了這個數")

#break

#else:

#print("沒有這個數")

#遞迴來完成二分法

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]

deffunc(n, left, right):

if left <= right: #

邊界print("哈哈"

) mid = (left + right)//2

if n >lst[mid]:

left = mid + 1

return func(n, left, right) #

遞迴 遞迴的入口

elif n right = mid - 1

#深坑. 函式的返回值返回給呼叫者

return func(n, left, right) #

遞迴elif n ==lst[mid]:

print("

找到了"

)

return

mid

#return # 通過return返回. 終止遞迴

else

:

print("

沒有這個數

") #

遞迴的出口

return -1 #

1, 索引+ 2, 什麼都不返回, none

#找66, 左邊界:0, 右邊界是:len(lst) - 1

ret = func(70, 0, len(lst) - 1)

print(ret) #

不是none

氣泡排序 二分法

核心 掐頭去尾取中間.一次砍一半 二分查詢.每次能夠排除掉一半的資料.查詢的效率非常高.但是侷限性比較大.必須是有 序序列才可以使用二分查詢 兩種演算法 常規迴圈,遞迴迴圈 使用二分法可以提高效率,前提條件 有序序列 lst 22,33,44,55,66,77,88,99,101 238 345 4...

氣泡排序和二分法查詢

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

二分法和氣泡排序

先放乙個 可以看到冒泡,選擇,插入排序的過程 冒泡 選擇 插入排序 前言 二分法是乙個優化演算法,在乙個基於有序列表中,列表從1到10000,如果要找乙個8899的數字,不用二分法的話,就是迴圈從一到10000,直到找到8899.但是,有沒有想過,前5000個都比8899小,所以能不能直接第一次就判...