1. 程式人生 > 實用技巧 >演算法排序

演算法排序

# 二分查詢

def erfen(alist,item):
  # 構造初始下標和結束下標
  first = 0
  last = len(alist)-1
  # 構造迴圈比較條件
  while first <= last:
    #構造中間值下標
    mid = (first+last)//2
     if item == alist[mid]:
      return True,alist.index(item)
    else:
    # 如果說查詢的值大於中間值的的話
      if item>alist[mid]:
   first = mid+1
   else:
   last = mid - 1
   return False

迭代查詢

# 通過迭代來查詢

def fun(alist,item):

  if len(alist) == 0:
    return False
  else:
    mid = len(alist) // 2 #獲取中間值的下標
    if item == alist[mid]:
      return True,item
    elif item < alist[mid]: # 如果查詢的數小於中間值
      return fun(alist[:mid],item) #從開頭到中間值查詢 [:mid]是中間值66往前得數
    else:
      return fun(alist[mid+1:],item) # 否則從中間值下一個數到結尾


print(fun([-22,-11,0,11,22,33,44,55,57,66,72,81,96,123456],44))

# 氣泡排序
def func(alist):
# x就是 1 到 傳過來的這個引數的長度總值
for x in range(1,len(alist)):
# i就是傳過來的列表長度 -去x
for i in range(0,len(alist)-x):
# 如果過下標i 小於i+1
if alist[i] > alist[i+1]:
# name下標i 就和下標i+1 互換位置
alist[i],alist[i+1] = alist[i+1],alist[i]
# 返回重組後的列表
return alist



# 選擇排序
def func(alist):
# x就是1到傳過來的這個引數的總長度
for x in range(0,len(alist)):

# min_num 就等於每次迴圈的小標對應數字
min_num = alist[x]

# 迴圈小標x+1 到所有下標長度
for i in range(x+1,len(alist)):
# 如果下標i的引數大於min_num
if alist[i] < min_num:
# 互換位置(引數互換)
alist[i],min_num = min_num,alist[i]
alist[x] = min_num
return alist

print(func([1,55,22,66,44,22,88]))