版上各位前辈好,
小弟是入门者,最近教授出题要写qsort,
概念是对list选取一pivot,
比他小的都放左边,大的放右边,
如此重复,直到完整排序。
我的写法如下图:
http://i.imgur.com/PyV2XzW.jpg
最後return的时候不知道该怎麽让递回关系在达到排序完毕时停止,不知道要怎麽设条件,
应该说有想到用len=1做停止条件,
但不知道该放在哪里,
资质驽钝,还请各位多多指教包涵。
上网查别人写好的都需要定义很多函式再互相呼叫,还是那才是唯一解呢?
2018/4/16 21:00 感谢各位的回覆 终於开窍了
http://i.imgur.com/sKZFl2f.jpg
-----
Sent from my ASUSSSSSSSSSSSSS .
作者: gvi86113 (欧派king) 看板: Python
标题: [问题] Quick Sort陷入无穷递回
时间: Sun Apr 15 15:25:33 2018
版上各位前辈好,
小弟是入门者,最近教授出题要写qsort,
概念是对list选取一pivot,
比他小的都放左边,大的放右边,
如此重复,直到完整排序。
我的写法如下图:
http://i.imgur.com/PyV2XzW.jpg
最後return的时候不知道该怎麽让递回关系在达到排序完毕时停止,不知道要怎麽设条件,
应该说有想到用len=1做停止条件,
但不知道该放在哪里,
资质驽钝,还请各位多多指教包涵。
上网查别人写好的都需要定义很多函式再互相呼叫,还是那才是唯一解呢?
-----
Sent from my ASUSSSSSSSSSSSSS .
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.204.97.162
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1523777136.A.97B.html
※ 编辑: gvi86113 (180.204.97.162), 04/15/2018 15:28:52
※ 编辑: gvi86113 (180.204.97.162), 04/15/2018 15:46:41
※ 编辑: gvi86113 (180.204.97.162), 04/15/2018 15:48:05
1F:推 hadoop: list长度为 1 的时候终止递回 04/15 16:09
我有想到用len(less_lst) = 1做条件,但没想到应该要放在哪里
※ 编辑: gvi86113 (180.204.97.162), 04/15/2018 16:28:04
2F:→ djshen: 想想看长度1代表什麽 04/15 16:29
我知道长度=1时,代表已经分割到结果了,可是如果要把条件设进去的话,我反而不知道怎麽再次叫出递回了,资质驽钝还请多包涵 QQ
3F:推 hadoop: 放在第一行,直接 return 长度 1 的list 04/15 16:38
设条件之後反而不太清楚递回该放在哪里了,目前写这样连自己都觉得不合理
http://i.imgur.com/9oCMBkr.jpg
※ 编辑: gvi86113 (180.204.97.162), 04/15/2018 16:52:52
※ 编辑: gvi86113 (180.204.97.162), 04/15/2018 16:53:55
※ 编辑: gvi86113 (180.204.97.162), 04/15/2018 17:00:02
4F:→ djshen: 分割到结果? 你再想想看吧 04/15 20:03
5F:→ bowin: base case: len==1 => return list; 04/15 20:18
6F:→ bowin: take pivot=list[len//2]; 04/15 20:19
7F:→ bowin: return quicksort(list_l)+pivot+quicksort(list_u) 04/15 20:21
8F:→ bowin: list_l = list smaller than pivot; list_u, similarly 04/15 20:22
9F:→ bowin: Soory for quick typo: base case: len<=1 04/15 20:46
10F:→ bowin: Apology for typo: "Sorry"... =_= 04/15 20:47
11F:推 TitanEric: 第一次看到qsort是这样写 04/15 21:41
我看到的范例都用好几个函式互相呼叫 只有我这样写吗qq?
12F:推 vfgce: 你的问题不是qsort,是你根本不会recurion...... 04/15 22:25
因为当下不知道条件怎麽放进去所以就先这样待补 ><
13F:→ vfgce: recursion要有明确的终止条件,不然就是无限执行.... 04/15 22:26
14F:推 mantour: 你的new_list = ... 那一行的右边 qsort 应该是打错了 04/15 23:12
15F:→ mantour: 然後这一行就进入递回了 後面的if根本不会被执行到 04/15 23:13
16F:推 mantour: 若 len(L) == 1, qsort(L) 应该 return 什麽 ? 04/15 23:45
17F:推 Kazimir: 你这样能想的清楚每一层会回传什麽东西吗...? 04/15 23:58
19F:推 hihi0123: 资料结构用python上蛮稀奇的 04/16 09:30
20F:→ bowin: MIT EECS也是用Python上Alg & Data Structures 04/16 10:42
感谢各位回覆 我已经找到解决方法了 晚点补上程式码
※ 编辑: gvi86113 (49.215.208.192), 04/16/2018 11:35:31
※ 编辑: gvi86113 (49.215.208.192), 04/16/2018 11:36:41
※ 编辑: gvi86113 (49.215.208.192), 04/16/2018 11:37:19
※ 编辑: gvi86113 (49.215.208.192), 04/16/2018 12:52:56
※ 编辑: gvi86113 (49.215.208.192), 04/16/2018 12:55:33