99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀python實(shí)現(xiàn)折半查找和歸并排序算法
python實(shí)現(xiàn)折半查找和歸并排序算法
2018-05-03
收藏

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

今天依舊是學(xué)算法,前幾天在搞bbs項(xiàng)目,界面也很丑,評(píng)論功能好像也有BUG。現(xiàn)在不搞了,得學(xué)下算法和數(shù)據(jù)結(jié)構(gòu),筆試過(guò)不了,連面試的機(jī)會(huì)都沒(méi)有……

今天學(xué)了折半查找算法,折半查找是蠻簡(jiǎn)單的,但是歸并排序我就挺懵比,看教材C語(yǔ)言寫的歸并排序看不懂,后來(lái)參考了別人的博客,終于搞懂了。

折半查找

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

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


defBinSearch(array, key, low, high):
 mid=int((low+high)/2)
 ifkey==array[mid]:# 若找到
  returnarray[mid]
 iflow > high:
  returnFalse
 
 ifkey < array[mid]:
  returnBinSearch(array, key, low, mid-1)#遞歸
 ifkey > array[mid]:
  returnBinSearch(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)# 通過(guò)折半查找,找到65
 print(ret)

輸出: 在列表中查找76.

76

時(shí)間復(fù)雜度:O(logn)

歸并排序算法

先闡述一下排序思路:

首先歸并排序使用了二分法,歸根到底的思想還是分而治之。歸并排序是指把無(wú)序的待排序序列分解成若干個(gè)有序子序列,并把有序子序列合并為整體有序序列的過(guò)程。長(zhǎng)度為1的序列是有序的。因此當(dāng)分解得到的子序列長(zhǎng)度大于1時(shí),應(yīng)繼續(xù)分解,直到長(zhǎng)度為1.

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

合并的過(guò)程如下:

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

來(lái)來(lái)來(lái),看我用python寫的歸并排序算法:

defmerge_sort(array):# 遞歸分解
 mid=int((len(array)+1)/2)
 iflen(array)==1:# 遞歸結(jié)束的條件,分解到列表只有一個(gè)數(shù)據(jù)時(shí)結(jié)束
  returnarray
 list_left=merge_sort(array[:mid])
 list_right=merge_sort(array[mid:])
 print(">>>list_left:", list_left)
 print(">>>list_right:", list_right)
 returnmerge(list_left, list_right)# 進(jìn)行歸并
 
 
defmerge(list_left, list_right):# 進(jìn)行歸并
 final=[]
 whilelist_leftandlist_right:
  iflist_left[0] <=list_right[0]:# 如果將"<="改為"<",則歸并排序不穩(wěn)定
   final.append(list_left.pop(0))
  else:
   final.append(list_right.pop(0))
 
 returnfinal+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] 

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

空間復(fù)雜度:O(n)

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

對(duì)序列{ 6, 5, 3, 1, 8, 7, 2, 4 }進(jìn)行歸并排序的實(shí)例如下:

使用歸并排序?yàn)橐涣袛?shù)字進(jìn)行排序的宏觀過(guò)程:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助


數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }