Python(8) python中的冒泡排序、快速排序

'''
冒泡排序的概念:
取出列表中的当前值与下一个值进行比较,比较完成后,向列表的最后方或最前方浮动(一次浮动一个位置)
外层for循环->控制列表中余下比较元素的个数
内层for循环->控制当前循环比较的元素
'''
#冒泡排序
def maoPao(infos):
    for i in range(len(infos) - 1):
        for j in range(len(infos) - 1 - i):
            if infos[j] > infos[j+1]:
                infos[j],infos[j+1] = infos[j+1],infos[j]
    return infos

#列表lists使用冒泡从小到大排序
lists = [33,12,8,88,10,6,5,18]
res = maoPao(lists)
print(res)

'''
快排的概念:
取出需要排序的列表中的第一个(下面案例为取出第一个)或者最后一个元素,作为参照元素
使用for循环,拿列表中第[1:last](第二个到最后一个元素)依次和列表的第一个元素进行比较
如果for循环的当前元素比第一个元素大,则定义一个max列表,并把当前元素加入其中
如果for循环的当前元素比第一个元素小,则定义一个min列表,并把当前元素加入其中
若返回从小到大的排序,则使用 |min + 第一个值(列表中的比较元素)+ max| 返回
注意返回列表中的min和max列表,应使用递归函数,再次调用当前排序函数
最后在排序函数逻辑开始的地方
判断传入的列表(需要排序的列表)长度是否<=1(小于等于1)
如果满足<=1
则返回正在递归中的传入列表
'''
#快速排序(快排)
#普通写法
def quick(infos):
    if len(infos) <= 1:
        return infos
    mins = []
    maxs = []
    for v in infos[1:]:
        if v > infos[0]:
            maxs.append(v)
        elif v < infos[0]:
            mins.append(v)
    return quick(mins) + infos[0:1] + quick(maxs)#注意!这里如果用info[0]取值,取出的时列表中的int值。所以return拼接的列表时,应用infos[0:1]取值,这样取出的是一个内含一个元素的列表,返回拼接列表的时候就不会报错了!

lists = [33,12,8,88,10,6,5,18]
res = quick(lists)
print(res)


#list推导式写法
def quick_tds(infos):
    if len(infos) <= 1:
        return infos
    return quick_tds([v for v in infos[1:] if vinfos[0]])

lists = [33,12,8,88,10,6,5,18]
res = quick_tds(lists)
print(res)




友情提示:

Python学习交流、资源共享群:563626388 QQ




你可能感兴趣的:(Python3.5基础,激情屌丝猿生!)