Crossin的编程教室

标题: 【每日一坑2】脑洞大开的解法 [打印本页]

作者: pythonnm    时间: 2016-9-12 23:33
标题: 【每日一坑2】脑洞大开的解法
from random import randint

a=[randint(1,20) for i in range(20)]
print a
b=[]
for i in a:
    if i not in b:
        b.append(i)
print b

def easysort(arr):
    if len(arr)<=1:
        return arr
    else:
        middlen=arr[len(arr)/2]
        left=[i for i in arr if i<middlen]
        middle=[i for i in arr if i==middlen]
        right=[i for i in arr if i>middlen]
        return easysort(left)+middle+easysort(right)
print easysort(b)

作者: pythonnm    时间: 2016-9-12 23:41
网上找到的答案
但是第二部分排序的函数我还是没看懂,谁能来帮忙解读下吗?
作者: crossin先生    时间: 2016-9-13 17:23
pythonnm 发表于 2016-9-12 23:41
网上找到的答案
但是第二部分排序的函数我还是没看懂,谁能来帮忙解读下吗? ...

用递归实现的折半排序吧。每次把小于中间数的扔到left,大于中间数的扔到right,然后再对left、right分别做同样操作,直到只剩一个数




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5