[问题] 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