国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實現(xiàn)折半查找和歸并排序算法

2019-11-25 16:14:59
字體:
來源:轉載
供稿:網(wǎng)友

今天依舊是學算法,前幾天在搞bbs項目,界面也很丑,評論功能好像也有BUG。現(xiàn)在不搞了,得學下算法和數(shù)據(jù)結構,筆試過不了,連面試的機會都沒有……

今天學了折半查找算法,折半查找是蠻簡單的,但是歸并排序我就挺懵比,看教材C語言寫的歸并排序看不懂,后來參考了別人的博客,終于搞懂了。

折半查找

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

看我用python編程實現(xiàn):

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時,應繼續(xù)分解,直到長度為1.

(下圖是分解過程,圖自python編程實現(xiàn)歸并排序)

合并的過程如下:

很好,你現(xiàn)在可以和別人說,老子會歸并排序了。但是讓你寫代碼出來,相信你是不會的……

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

def merge_sort(array): # 遞歸分解 mid = int((len(array)+1)/2) if len(array) == 1: # 遞歸結束的條件,分解到列表只有一個數(shù)據(jù)時結束  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]: # 如果將"<="改為"<",則歸并排序不穩(wěn)定   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)

穩(wěn)定性: 穩(wěn)定

對序列{ 6, 5, 3, 1, 8, 7, 2, 4 }進行歸并排序的實例如下:

 使用歸并排序為一列數(shù)字進行排序的宏觀過程:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 武定县| 漾濞| 普宁市| 和硕县| 高阳县| 武强县| 土默特右旗| 汝城县| 郸城县| 保山市| 神木县| 会理县| 延安市| 九寨沟县| 南澳县| 临澧县| 莆田市| 铁岭市| 府谷县| 栾城县| 十堰市| 会泽县| 高平市| 钟祥市| 汝阳县| 湖南省| 万山特区| 黑龙江省| 大悟县| 吴川市| 五原县| 平湖市| 金溪县| 七台河市| 锡林浩特市| 长沙县| 诸城市| 大新县| 伽师县| 赤峰市| 邢台县|