一行代码解决八大经典算法问题(python版)——快速,选择,冒泡,对分,异味构词,对称串,回文串,埃筛法求正整数n以内(不含n)的所有质数

 十大排序?回文?对称?这些几乎都是新手学习编程语言的必经之路,无论是学习C,py,java都躲不过去,思想一致情况下,python实现这些代码都最为简便,那么,极简情况有多简呢?

给出如下样式,望互相交流学习!!!

python版(求大佬改编成C语言版本)

#快速排序

#快速排序一行代码完事
l = [5,2,7,11,8,6,5,1] + [0,4,12,1,5,9,3,9]
q = lambda l: q([x for x in l[1:] if x <= l[0]]) + [l[0]] + q([x for x in l if x > l[0]]) if l else []
print(q(l))

#选择排序

#选择排序一行代码完事
l = [5,2,7,11,8,6,5,1] + [0,4,12,1,5,9,3,9]
l = [l.pop(l.index(min(l))) for _ in range(len(l))]
print(l)

#冒泡排序

#冒泡排序一行代码完事
l = [5,2,7,11,8,6,5,1] + [0,4,12,1,5,9,3,9]
[l.append(l.pop(0) if i == len(l) - 1 or l[0] < l[1] else l.pop(1)) for j in range(0, len(l)) for i in range(0, len(l))]
print(l) 

#对分查找

#对分查找一行代码完事
l = [0,1,1,1,2,2,4]
bs = lambda l, x, lo, hi: -1 if lo > hi else (lo + hi) // 2 if l[(lo + hi) // 2] == x else bs(l, x, lo, (lo + hi) // 2 - 1) if l[(lo + hi) // 2] > x else bs(l, x, (lo + hi) // 2 + 1, hi)
print(bs(l, 2, 0, len(l) - 1))

#异位构词判定

#异位构词判定,一行代码完事
#“listen” → “silent”
#“funeral ” → “real fun”
#“elvis” → “lives”
s1 = "listen"
s2 = "silent"
b = (len(s1) == len(s2)) and all(filter(lambda x:x in s2,s1)) #一种方法
c = lambda s1, s2: sorted(s1) == sorted(s2) #另一种方法
print(b,c(s1,s2))

#对称串判定

#对称串判定,一行代码完事
s1 = "abopba"
d = lambda L:L[:len(L) // 2] == L[len(L) - 1:(len(L) + 1) // 2 - 1:-1]
print(d(s1))

#回文串判定

#回文串判定,一行代码完事
s1 = "abopba"
d = lambda L:L == L[::-1]
print(d(s1))

#埃筛法求正整数n以内(不含n)的所有质数

#埃筛法求正整数n以内(不含n)的所有质数,一行代码完事
n = 31
primes = reduce(lambda r, x: r - set(range(x ** 2, n, x)) if x in r else r, range(2, int(n ** 0.5) + 1), set(range(2, n)))
print(primes)

码字不易,求关注!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值