[問題] Quick Sort陷入無窮遞迴

作者: 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:00
list長度為 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:00
base 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"... =_=
作者: TitanEric (泰坦)   2018-04-15 21:41:00
第一次看到qsort是這樣寫
作者: 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 什麼 ?
作者: Kazimir (Kazimir)   2018-04-15 23:58:00
你這樣能想的清楚每一層會回傳什麼東西嗎...?https://ideone.com/NWnjCu 我其實也沒寫過 試個

Links booklink

Contact Us: admin [ a t ] ucptt.com