快速排序主函数的return
老师好!我有个关于快速排序主函数中是否应该加return的问题(下面是我的python code)。您在视频中没有return,我理解,在python中,数组list是mutable type,所以不需要return原数组?但是,我的程序中,如果不加入```return nums```,返回的却是一个None; 加入了return nums,才能正确返回sorted list。
我不确定问题出在哪里?能否请您点拨一二?谢谢!
1 | def QuickSort(nums, l, r):<br> if l > = r:<br> return None <br><br> p = Partition(nums, l, r)<br><br> QuickSort(nums, l, p - 1 )<br> QuickSort(nums, p + 1 , r)<br> return nums<br><br><br><br> def Partition(nums, l, r):<br><br> marker = nums[l]<br> j = l<br><br> for k in range (j + 1 ,r + 1 ):<br> if nums[k] < = marker:<br> j + = 1 <br> nums[k], nums[j] = nums[j], nums[k]<br> nums[l], nums[j] = nums[j], nums[l]<br><br> return j<br> |
13
收起
正在回答 回答被采纳积分+1
1回答
liuyubobobo
2021-08-20 03:29:35
是的,课程中的快速排序是原地排序。原地排序的意思就是,不是通过返回值来得到排序结果,而是直接在传入的 nums 参数中进行操作,得到排序结果。
Python 里同理,返回值虽然是 None,但你可以打印输出一下经过快排函数的 nums,应该已经排好序了。
你当然可以做成“不修改原数组,返回一个排好序的新数组的快速排序”,其实很简单,把传来 nums 先做一份拷贝 nums_copy,然后对 nums_copy 做原地块排,返回 nums_copy 就好。
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧