AcWing 785. 快速排序(python3版本 not RE)
原题链接
简单
作者:
jijeng
,
2019-10-27 15:45:30
,
所有人可见
,
阅读 4802
算法1
快排 $O(nlogn)$
python3 代码
n =int(input())
nums =list(map(int, input().split()))
def quick_sort(nums):
if(len(nums) <=1): return nums;
privot =nums[len(nums)//2]
left =[x for x in nums if x < privot]
mid =[x for x in nums if x == privot]
right =[x for x in nums if x> privot]
#print (" ".join(list(map(str, left))) +","+ str(mid[0]) +","+" ".join(list(map(str, right))) )
return quick_sort(left) +mid + quick_sort(right)
if __name__ =="__main__":
nums =quick_sort(nums)
print(" ".join(list(map(str, nums))))
大佬你好,为什么将nums分为left和right会re呢
privot 取中间值测试有可能过不了,取随机的就可以
同样的代码为啥conplie Error了?
大佬问一下快排函数里面的第一个判断语句为什么不能写成len(nums)==1,判断的条件不是当这列表里面的数字只有1个吗
递归的时候,递归进来的nums有可能是空的,如果设置成len(nums)==1,就不能检测出空数组的情况,那么后面的nums[len // 2] 就会数组越界
懂了,谢谢大佬
666
真秀
真的佩服大佬,列表推导直接把代码压缩到了十九行
privot真秀
列表推导式很好的思路 很简洁很好理解,谢谢!
列表推导真好用
加强数据后好像只有这个能过了,,,
这个内存会爆掉吧
我当时运行的时候没有爆掉~
好,谢谢啦~
很简洁