python實現折半尋找和歸併排序演算法,python折半

來源:互聯網
上載者:User

python實現折半尋找和歸併排序演算法,python折半

今天依舊是學演算法,前幾天在搞bbs項目,介面也很醜,評論功能好像也有BUG。現在不搞了,得學下演算法和資料結構,筆試過不了,連面試的機會都沒有……

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

折半尋找

先看下課本對於 折半尋找的講解。注意了,折半尋找是對於有序序列而言的。每次折半,則尋找區間大約縮小一半。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+1, 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]: # 如果將"<="改為"<",則歸併排序不穩定   final.append(list_left.pop(0))  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)

穩定性: 穩定

對序列{ 6, 5, 3, 1, 8, 7, 2, 4 }進行歸併排序的執行個體如下:

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

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.