python實現折半查詢和歸併排序演算法

2022-10-03 23:06:22 字數 2355 閱讀 7844

今天依舊是學程式設計客棧演算法,前幾天在搞bbs專案,介面也很醜,評**能好像也有bug。現在不搞了,得學下演算法和資料結構,筆試過不了,連面試的機會都沒有……

今天學了折半查詢演算法,折半查詢是蠻簡單的,但是歸併排序我就挺懵比,看教材c語言寫的歸併排序看不懂,後來參考了別人的部落格,終於搞懂了。

折半查brnheie找

先看下課本對於 折半查詢的講解。注意了,折半查詢是對於有序序列而言的。每次折半,則查詢區間大約縮小一半。low,high分別為查詢區間的第乙個下標與最後乙個下標。出現low>high時,說明目標關鍵字在整個有序序列中不存在,查詢失敗。

看我用python程式設計實現:

def binsearch(array, key, low, high):

mid = int((low+high)/2)

if key == array[mid]: # 若找到

return array[mid]

if low > high:

return false

if key < array[mid]:

return binsearch(array, key, low, mid-1) #遞迴

if key > array[mid]:

return binsearch(array, key, mid+ high)

if __name__ == "__main__":

array = [4, 13, 27, 38, 49, 49, 55, 65, 76, 97]

ret = binsearch(array, 76, 0, len(array)-1) # 通過折半查詢,找到65

print(ret)

輸出: 在列表中查詢76.

76時間複雜度:o(logn)

歸併排序演算法

先闡述一下排序思路:

首先歸併排序使用了二分法,歸根到底的思想還是分而治之。歸併排序是指把無序的待排序序列分解成若干個有序子串行,並把有序子串行合併為整體有序序列的過程。長度為1的序列是有序的。因此當分解得到的子串行長度大於1時,應繼續分解,直到長度為1.

(下圖是分解過程,圖自python程式設計實現歸併排序)

合併的過程如下:

很好,你現在可以和別人說,老子會歸併排序了。但是讓你寫**出來,相信你是不會的……

來來來,看我用python寫的歸併排序演算法:

def merge_sort(array): # 遞迴分解

mid = int((len(array)+1)/2)

if len(array) == 1: # 遞迴結束的條件,分解到列表只有乙個資料時結束

return array

list_left = merge_sort(array[:mid])

list_right = merge_sort(array[mid:])

print(">>>list_left:", list_left)

print(">>>list_right:", list_right)

return merge(list_left, list_right) # 進行歸併

def merge(list_left, list_right): # 進行歸併

final =

while list_left and list_right:

if list_left[0] <= list_right[0]: # 如果將"<="改為"brnheie0))

else:

final.append(list_right.pop(0))

return final+list_left+list_right # 返回排序好的列表

if __name__=="__main__":

array = [49, 38, 65, 97, 76]

print(merge_sort(array))輸出:

輸出:>>>list_left: [49]

>>>list_right: [38]

>>>list_left: [38, 49]

>>>list_right: [65]

>>>list_left: [97]

>>>list_right: [76]

>>>list_left: [38, 49, 65]

>>>list_right: [76, 97]

[38, 49, 65, 76, 97] 

時間度雜度: 平均情況=最好情況=最壞情況=o(nlogn)

空間複雜度: o(n)

穩定性: 穩定

對序列進行歸併排序的例項如下:

使用歸併排序為一列數字進行排序的巨集觀過程:

本文標題: python實現折半查詢和歸併排序演算法

本文位址: /jiaoben/python/187546.html

python實現順序查詢和折半查詢

1 順序查詢 特點 不需要內容有序,乙個乙個查詢 缺點 查詢效率低,不適合大資料 假設資料的總個數為n,則計算複雜度為n 2 下面的程式由三個函式組成,第乙個函式是裝飾器,作用是計算函式的 執行時間 第二個函式的作用是資料的輸入,為方便直接給列表裝載i 第三個函式的作用是實現順序查詢 coding ...

Python實現二分查詢 折半查詢

我們在學習程式語言或者演算法設計的時候,總是繞不過查詢演算法和排序演算法。對於順序查詢和冒泡查詢我們應該是最熟悉的了,如果這兩個還不會,真的要加把勁兒了。剛好最近演算法老師在講分治思想,剛好二分查詢就是根據分治思想進行設計的。在有序陣列nums中查詢乙個數字x,順序查詢的方法是將陣列nums中的元素...

折半查詢 java實現

二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。author administrator public cl...