4、快速排序

4、快速排序

  4.1 分而治之

    快速排序 —— 一种使用D&C(divide and conquer)的排序算法。

    使用D&C解决问题的过程包括两个步骤:

    (1)找出基线条件,这种条件必须尽可能简单。

    (2)不断将问题分解(或者说缩小规模),直到符合基线条件。

    代码清单4-1 求和

# -*- coding:UTF-8 -*-
# 使用循环求和
def sum(arr):
    total = 0
    for x in arr:
        total += x
    return total

# 使用递归求和
def sum2(arr2):
    if arr2 ==[]:
        return 0
    return arr2[0]+sum(arr2[1:])


print sum([2, 4, 6])
print sum2([2, 4, 6])

    4.2 快速排序

    快速排序是一种常用的排序算法,比选择排序快的多。快速排序也使用了D&C。

    归纳证明是一种证明算法行之有效的方式,它分两步:基线条件和归纳条件。

    快速排序是最快的排序算法之一,也是D&C典范。

    代码清单4-2 快速排序  

# -*- coding:UTF-8 -*-
# 快速排序


def quicksort(array):
    # 基线条件:为空或只包含一个元素的数组是“有序”的
    if len(array) < 2:
        return array
    # 递归条件
    else:
        pivot = array[0]
    # 由所有小于基准值的元素组成的子数组
    less = [i for i in array[1:] if i <= pivot]
    # 由所有大于基准值的元素组成的子数组
    greater = [i for i in array[1:] if i > pivot]
    return quicksort(less) + [pivot] + quicksort(greater)


print quicksort([10, 5, 2, 3])
# result: [2, 3, 5, 10]

 

    4.3 合并排序

  合并排序(merge sort),运行时间为,比选择排序快得多,最糟情况运行时间为

   大O表示法中的常量有时候事关重大,这就是快速排序比合并排序快的原因。

posted @ 2019-04-26 13:42  Lamfai  阅读(238)  评论(0编辑  收藏  举报