作者:
gvi86113 (歐派歐派凱)
2018-04-15 15:25:33版上各位前輩好,
小弟是入門者,最近教授出題要寫qsort,
概念是對list選取一pivot,
比他小的都放左邊,大的放右邊,
如此重複,直到完整排序。
我的寫法如下圖:
http://i.imgur.com/PyV2XzW.jpg
最後return的時候不知道該怎麼讓遞迴關係在達到排序完畢時停止,不知道要怎麼設條件,
應該說有想到用len=1做停止條件,
但不知道該放在哪裡,
資質駑鈍,還請各位多多指教包涵。
上網查別人寫好的都需要定義很多函式再互相呼叫,還是那才是唯一解呢?
作者:
hadoop (elephant)
2018-04-15 16:09:00list長度為 1 的時候終止遞迴
作者:
djshen (djshen)
2018-04-15 16:29:00想想看長度1代表什麼
作者:
hadoop (elephant)
2018-04-15 16:38:00放在第一行,直接 return 長度 1 的list
作者:
djshen (djshen)
2018-04-15 20:03:00分割到結果? 你再想想看吧
作者:
bowin (盡其在我)
2018-04-15 20:18:00base case: len==1 => return list;take pivot=list[len//2];return quicksort(list_l)+pivot+quicksort(list_u)list_l = list smaller than pivot; list_u, similarlySoory for quick typo: base case: len<=1Apology for typo: "Sorry"... =_=
作者: vfgce (小兵) 2018-04-15 22:25:00
你的問題不是qsort,是你根本不會recurion......recursion要有明確的終止條件,不然就是無限執行....
作者:
mantour (朱子)
2018-04-15 23:12:00你的new_list = ... 那一行的右邊 qsort 應該是打錯了然後這一行就進入遞迴了 後面的if根本不會被執行到若 len(L) == 1, qsort(L) 應該 return 什麼 ?