首页 > 编程语言 > 详细

算法——分而治之及快速排序

时间:2019-05-25 15:05:14      阅读:169      评论:0      收藏:0      [点我收藏+]

分而治之及快速排序

算法——快速排序

分而治之(divide and conquer, D&C):重要的递归式问题解决方法,包括两个步骤
1)找出基线条件,要尽可能简单
2)不断将问题分解(缩小规模),直到符合基线条件

快速排序(quick sort):第一个重要的D&C算法

# divide_and_conquer.py 分而治之


def sum(li):  # 递归方法求和
    if len(li) == 1:  # base case
        return li[0]
    else:  # recursive case
        return li[0] + sum(li[1:])


def items(li):  # 递归方法求元素数
    if len(li) == 1:
        return 1
    else:
        return 1 + items(li[1:])


def max(li, num=0):
    if len(li) == 0:  # base case
        return num
    else:  # recurvise case 
        if num < li[0]:
            num = li[0]
        return max(li[1:], num)


if __name__ == __main__:
    li = [1, 4, 6, 8, 9]
    print(sum(li))
    print(items(li))
    print(max(li))
# quick_sort.py 快速排序


def quick_sort(arr):
    if len(arr) < 2:  # 如果数组小于两个值,返回(已经无需排序)
        return arr
    else:
        pivot = arr[0]  # pivot 基准值
        less = [i for i in arr[1:] if i <= pivot]
        greater = [i for i in arr[1:] if i > pivot]
        return quick_sort(less) + [pivot] + quick_sort(greater)


if __name__ == __main__:
    li = [10, 5, 2, 3]
    print(quick_sort(li))

 

算法——分而治之及快速排序

原文:https://www.cnblogs.com/noonjuan/p/10922390.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!