最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實現折半查找和歸并排序算法

 更新時間:2017年04月14日 09:01:02   作者:前程明亮  
這篇文章主要介紹了python實現折半查找和歸并排序算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

折半查找

先看下課本對于 折半查找的講解。注意了,折半查找是對于有序序列而言的。每次折半,則查找區(qū)間大約縮小一半。low,high分別為查找區(qū)間的第一個下標與最后一個下標。出現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時,應繼續(xù)分解,直到長度為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]: # 如果將"<="改為"<",則歸并排序不穩(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 }進行歸并排序的實例如下:

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

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

相關文章

  • 詳解python實現線程安全的單例模式

    詳解python實現線程安全的單例模式

    這篇文章主要介紹了python實現線程安全的單例模式,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Python代碼打開本地.mp4格式文件的方法

    Python代碼打開本地.mp4格式文件的方法

    今天小編就為大家分享一篇Python代碼打開本地.mp4格式文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python中快速掌握Data Frame的常用操作

    Python中快速掌握Data Frame的常用操作

    這篇文章主要介紹了Python中快速掌握Data Frame的常用操作,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 基于Python編寫簡易的成語接龍游戲

    基于Python編寫簡易的成語接龍游戲

    成語接龍是中華民族傳統(tǒng)的文字游戲。它歷史悠久,是傳統(tǒng)文字、文化、文明的一個縮影,也是老少皆宜的民間文化娛樂活動。本文將用Python制作一個簡單的成語接龍游戲,需要的可以參考一下
    2022-03-03
  • python異步爬蟲之多線程

    python異步爬蟲之多線程

    這篇文章主要介紹了python異步爬蟲之多線程,多線程可以為相關阻塞的操作單獨開啟線程或者進程,阻塞操作可以異步執(zhí)行,但是無法無限制開啟多線程或多進程,下面我們一起學習詳細內容,需要的朋友可以參考一下
    2022-02-02
  • Django中的AutoField字段使用

    Django中的AutoField字段使用

    這篇文章主要介紹了Django中的AutoField字段使用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python可視化tkinter詳解

    Python可視化tkinter詳解

    這篇文章主要介紹了Python可視化tkinter詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Python函數裝飾器的使用教程

    Python函數裝飾器的使用教程

    在了解了Python函數裝飾器基礎知識和閉包之后,開始正式學習函數裝飾器。感興趣的朋友可以參考本文
    2021-06-06
  • Python socket實現多對多全雙工通信的方法

    Python socket實現多對多全雙工通信的方法

    今天小編就為大家分享一篇Python socket實現多對多全雙工通信的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python中邏輯與或(and、or)和按位與或異或(&、|、^)區(qū)別

    python中邏輯與或(and、or)和按位與或異或(&、|、^)區(qū)別

    這篇文章主要介紹了python中邏輯與或(and、or)和按位與或異或(&、|、^)區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論

积石山| 湖北省| 甘德县| 南木林县| 凉城县| 老河口市| 乌苏市| 阿拉尔市| 沾益县| 任丘市| 运城市| 秦皇岛市| 方山县| 武强县| 广宗县| 花莲县| 德化县| 横峰县| 贞丰县| 蓬安县| 突泉县| 二连浩特市| 龙川县| 陆河县| 遂川县| 福鼎市| 河津市| 莲花县| 大同县| 育儿| 凤阳县| 西昌市| 曲靖市| 施秉县| 宕昌县| 江川县| 沙河市| 茌平县| 金秀| 赣榆县| 防城港市|