Python利用递归函数和列表推导式实现快速排序

Python代码:

"""
基础知识:递归函数(函数在内部调用自身,这个函数就是递归函数)

计算1-N的整数之和

SUM = N + (N-1) + (N-1-1) + ... + 1

"""

def fact(n):
    if n==1:
        return 1
    return n + fact(n - 1)

n = 10
s = fact(10)
print("\r\n1-%s的整数之和是:%s" % (n,s))


"""
基础知识:列表推导式(通过for循环判断是否符合条件的方式从A列表中推导出B列表)

取出M以下的偶数

例如11以下偶数有:0,2,4,6,8,10

"""

m = 11
arr = [x for x in range(0, m) if x%2 ==0]
print("\r\n%s以下偶数有:%s" % (m,arr))

"""
利用递归函数和列表推导式实现快速排序

快速排序的处理逻辑:
1、选择1个数为基准(例如第1个数)
2、将待排序的数与逐个基准比较,分割成小于等于基准和大于基准的两部分
每部分重复以上1、2步骤

本例中:
1、以第1个数4为基准
2、得到第1部分,小于等于4的数组[1,2,4,0]
3、得到第2部分,大于4的数组[6,9,8,7,5]
4、分别对两部分数组递归
注意:第1部分+基准+第2部分 是每次排序后的结果

"""

def quickSort(lst):
    if len(lst) <= 1:
        return lst
    # 以第一个数
    left = [l for l in lst[1:] if l<=lst[0]]
    right = [r for r in lst[1:] if r>lst[0]]
    return quickSort(left) + lst[0:1] + quickSort(right)

lists = [4, 6, 9, 1, 8, 7, 2, 5, 4, 0]
print("\r\n排序前: %s\r\n" % lists)
print("排序后: %s" % quickSort(lists))

 

输出结果:

E:\python\algorithm>python3 quickSort.py

1-10的整数之和是:55

11以下偶数有:[0, 2, 4, 6, 8, 10]

排序前: [4, 6, 9, 1, 8, 7, 2, 5, 4, 0]

排序后: [0, 1, 2, 4, 4, 5, 6, 7, 8, 9]

 

=====结束=====

posted @ 2018-01-23 19:12  sam11  阅读(673)  评论(0编辑  收藏  举报