排序和搜尋(二) python實現二分查詢

2021-08-15 21:32:23 字數 1554 閱讀 9428

【基本原理】
而在二分查詢中,我們先取中間索引位置,如果找到就返回;沒找到(公升序排序),如果中間位置的值大於待查項,則排除中
間位置的值和比中間位置值大的另一半元素,如果待查項在列表中,肯定存在於小的半部分。重複此過程知道找到,返回

;反過來也一樣
【二分查詢分析】
列表有n項,第1次比較剩n/2,第2次比較剩n/4,第3次比較剩n/8,......,第i次比較剩n/2^i,最後剩一項,要麼是,要麼不是,故n/2^i=1,i=以2為底n的對數。因此二分查詢是o(log^n)。需注意排序和查詢的花銷均衡

【**】
#實現二分查詢

defbinarysearchbasic(alist,item):

first=0

last=len(alist)-1

post=(first+last)//2

found=falsewhile notfoundandfirst<=last:

ifalist[post]==item:

found=trueprint('找到了,位置在',post+1)

elifalist[post]1

else:

last=post-1

post = (first + last) //2

returnfound

print(binarysearchbasic([1,3,5,7,9,12,45,89,91,95,96,98],12))

#遞迴實現二分查詢

defbinarysearchbyrec(alist,item):

iflen(alist)==0:

return falseelse:

post=len(alist)//2

# print(post)

ifalist[post]==item:

return trueelifalist[post]returnbinarysearchbyrec(alist[post+1:], item)

else:

returnbinarysearchbyrec(alist[:post], item)

print(binarysearchbyrec([1,3,5,7,9,12,45,89,91,95,96,98],12))

Python實現二叉搜尋

二叉搜尋是在乙個有序的列表中,尋找目標元素。因此我們需要對半查詢即可。當目標元素比中間元素小,則在中間元素的左邊查詢 反之,則在目標元素的右邊查詢。直到左邊界比右邊界還要大停止查詢。def binarysearch target,arr right len arr 1 left 0 while le...

python實現二叉搜尋樹

二叉搜尋樹 binary search tree 又名二叉排序樹 binary sort tree 二叉搜尋樹是具有有以下性質的二叉樹 1 若左子樹不為空,則左子樹上所有節點的值均小於或等於它的根節點的值。2 若右子樹不為空,則右子樹上所有節點的值均大於或等於它的根節點的值。3 左 右子樹也分別為二...

python實現排序演算法二 歸併排序

歸併排序 基本思想 對於兩個排好序的陣列a和b,逐一比較a和b的元素,將較小值放入陣列c中,當a或者b陣列元素查詢完後,將a或者b剩餘的元素直接新增到c陣列中,此時c陣列即為有序陣列,這就是歸併排序原理 step1 對於乙個無序陣列a,可以取a元素中間索引,將a陣列分為兩個部分a1,a2 step2...