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小,所以能不能直接第一次就判...