作者john0126 (弹小男孩的木吉他)
看板Python
标题Re: [问题] 新手return范例问题
时间Tue Sep 12 22:02:51 2017
踏入不到一个月的新手,尝试回答一下,有错误的话请多指教。
: def quicksort(arr):
: if len(arr) <= 1:
: return arr
若 len(arr) <= 1 ,则不需排序,直接 return arr。
: pivot = arr[len(arr) // 2]
取 arr[len(arr) // 2 ] 作为关键的比较值,但其实我觉得无所谓,
直接用 arr[0] 也可以,不确定是否在数量太大时会影响执行速度?
: left = [x for x in arr if x < pivot]
只要比 pivot 小的,通通丢进 left
: middle = [x for x in arr if x == pivot]
与 pivot 相等的值
: right = [x for x in arr if x > pivot]
比 pivot 大的,通通丢进 right
: return quicksort(left) + middle + quicksort(right)
: print(quicksort([3,6,8,10,1,2,1]))
所以在这个例子里:
首先 len(arr) // 2 为 3 ,故 pivot = arr[3] = 10
会回传 quicksort([3,6,8,1,2,1]) + [10] + quicksort([])
然後如 stucode 大所说的,会持续递回呼叫 quicksort(),继续排序。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.36.241.142
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1505224975.A.B03.html
1F:→ uranusjr: 取中间的好处是可以让左右两个列表大小比较平均一点 09/12 23:44
2F:→ uranusjr: 因为实际应用中资料通常不会完全无序而是 partly sorted 09/12 23:45
3F:→ uranusjr: 讲错, 不是大小是排序需要用的步骤数 09/12 23:50
4F:→ john0126: 原来如此!感谢! 09/13 00:49