分治排序在隨機(jī)取值L[a]之后(直接取首/尾應(yīng)該是最省的吧),左邊都是小于L[a]的值,右邊是大于L[a]的值,然后持續(xù)遞歸至最后一個(gè),那么打個(gè)比方,如果右邊的值正好按照順序排好了,運(yùn)氣比較好!那么右邊的遞歸還是會(huì)持續(xù)進(jìn)行,哪這樣一來復(fù)雜度一定程度上是增加的!這是做了重復(fù)勞動(dòng)了!怎么避免或者說如何放一個(gè)記號(hào),一旦察覺到右邊或者左邊正好排好了就停止,只遞歸另一部分就好??以下是代碼!def?quicksort(L):
????assert?type(L)==list,'An?Error?about?the?type?of?Arguments!Check!Check!Check!'
????if?len(L)<=1:
????????return?L
????return?quicksort([x?for?x?in?L[1:]?if?x<=L[0]])\
???????????+[L[0]]\
???????????+quicksort([x?for?x?in?L[1:]?if?x>L[0]])還有一個(gè)小問題,關(guān)于Python遞歸深度,Python默認(rèn)好像遞歸深度是1000,應(yīng)該不到1000就警報(bào)了,為什么默認(rèn)1000?我手動(dòng)import sys調(diào)整好像也沒啥問題?。坑惺裁礉撛趩栴}導(dǎo)致Python默認(rèn)給你1000深度??
添加回答
舉報(bào)
0/150
提交
取消