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