最近工作專案忙的是焦頭爛額,不得不停止了演算法的更新,在專案修整期,試著再寫點什麼內容。
本來想接著寫nlp和資料探勘的相關演算法,後來考慮時間問題,寫點最最最基本的排序避免手生。
快速排序演算法,排序演算法中的經典演算法,時間複雜度,o(n*lgn)
演算法很容易理解,對於乙個array,取任意乙個數,和其他的數作比較,小於它的排左邊array,不小於它的排右邊array,然後再迭代左右array。最終收斂於最小array時返回。
時間複雜度在最優情況下,每次分成左右兩個相同長度的array,則分解次數為lgn,而每次的比較都是和n呈線性變化的次數,故複雜度為o(n*lgn)。最差情況,如果每次分array的時候,一次只能去掉乙個,那麼需要分解n次,複雜度為o(n^2)
python demo:
#coding:utf-8
'''created on 2023年7月20日
@author: hao
'''class fastsort():
def process(self, alist):
lengthlist = len(alist)
if lengthlist<=1:
return alist
intertemp = alist[0]
leftlist = list()
rightlist = list()
for i in range(1,lengthlist):
if alist[i]<=intertemp:
else:
return self.process(leftlist)+[intertemp]+self.process(rightlist)
if __name__=='__main__':
inputlist = [1,3,1,2,7,5,90]
print fastsort().process(alist=inputlist)
演算法筆記 6 匈牙利演算法
今天我們來看乙個沒有前幾篇講的那麼常用,但是很有用的演算法 匈牙利演算法 hungarian algorithm 匈牙利演算法主要用於解決一些與二分圖匹配 有關的問題,所以我們先來了解一下二分圖。二分圖 bipartite graph 是一類特殊的圖,它可以被劃分為兩個部分,每個部分內的點互不相連。...
演算法 排序(6)
快速排序 quicksort 1 演算法思想 快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 1 分治法的基本思想 分治法的基本思想是 將原問題分解為若干個規模更小但結構與原問題相似的子問...
演算法導論(6)
演算法最壞情況執行時間 平均情況 期望執行時間 插入排序 theta n 2 theta n 2 歸併排序 theta n lg n theta n lg n 堆排序 o n lg n 快速排序 theta n 2 theta n lg n 期望 計數排序 theta k n theta k n 基...