---
# System prepended metadata

title: wk14

---

# wk14_1207
ch08_演算法_排序與搜尋
8.3 搜尋
1. 循序搜尋
2. 二分搜尋
 [inclass practice]
{綜合演練} 
 實作2 :
俊民將中獎號碼建立成串列num=[67,12,9,52,91,3]， 讓妹妹輸入三個號碼，再以循序搜尋方法檢查這三個號碼種有幾個中獎， 並顯示其結果。

 實作3: 
下列名單為本期大樂透的中獎名單name=['David','Lily','Chiou','Bear','Shantel','Chynthia']， 讓使用者輸入一個姓名，輸入的字元大小寫不分， 例如輸入 david、David、DAVID都是同一人， 請以二分搜尋法檢查該名單是否中獎， 並顯示查詢結果。

4. 二分搜尋 : 中獎者姓名

num=[256,731,943,389,142,645,829,945,371,418] name=["林小虎","王中森","邵木淼","李大同","陳子孔","鄭美麗","曾溫柔","錢來多","賈天良","吳水品"]

n=len(num)-1 # 串列長度-1 IsFound=False min=0 max=n c=0 #計算比對次數

for i in range(0,n): for j in range(0,n-i):
if (num[j]>num[j+1]): # 由小到大排序 num[j],num[j+1]=num[j+1],num[j] # 兩數互換 name[j],name[j+1]=name[j+1],name[j] # 姓名互換

no = int(input("請輸入中獎者的編號："))

while(min<=max): mid=int((min+max)/2) c+=1 #比對次數加 1 if (num[mid]==no): #號碼相符 IsFound=True break

if (num[mid]>no):  #如果中間值大於輸入值 
   max=mid-1      #使用較小的一半區域繼續比對 
else:             #如果中間值不大於輸入值 
   min=mid+1      #使用較大的一半區域繼續比對 

if (IsFound==True): print("中獎者的姓名為：",name[mid]) else: print("無此中獎號碼！") print("共比對 ", c ," 次")