博客
关于我
python算法与数据结构(17)快速排序
阅读量:547 次
发布时间:2019-03-09

本文共 1623 字,大约阅读时间需要 5 分钟。

快速排序

也是分治法。很多标准语言的排序方法,最优的算法复杂度比较好。
原理:定一个主元,左边指针从左往右,右边指针从右往左,把与主元小的元素,把主元函数和这个元素调换位置。
方案1 :缺点需要额外内存空间

def quicksort(array):    if len(array) < 2:        return array    else:        pivot_index = 0        pivot = array[pivot_index]        less_port = [i for i in array[pivot_index+1:] if i <=pivot]        great_port = [i for i in array[pivot_index+1:] if i > pivot]        return quicksort(less_port) + [pivot] + quicksort(great_port)def test_quicksort():    import random    seq = list(range(10))    random.shuffle(seq)    assert quicksort(seq) == sorted(seq)

方案二:

"""方案2"""def portition(array, beg, end):    pivot_index = beg    pivot = array[pivot_index]    left = pivot_index + 1    right = end - 1    while True:        while left <= right and array[left] < pivot:            left += 1        while right >= left and array[right] >= pivot:            right -= 1        if left > right:            break        else:            array[left], array[right] = array[right], array[left]    array[pivot_index], array[right] = array[right], array[pivot_index]    return rightdef test_portition():    l = [4, 1, 2, 8]    assert portition(l, 0, len(l)) == 2    l = [1, 2, 3, 4]    assert portition(l, 0, len(l)) == 0    l = [4, 3, 2, 1]    assert portition(l, 0, len(l)) == 3
def quicksort_inplace(array, beg, end):    if beg < end:        pivot = portition(array, beg, end)        quicksort_inplace(array, beg, pivot)        quicksort_inplace(array, pivot+1, end)def test_quicksort_inplace():    import random    seq = list(range(10))    random.shuffle(seq)    print(seq)    quicksort_inplace(seq, 0, len(seq))    print(seq)

转载地址:http://ismsz.baihongyu.com/

你可能感兴趣的文章
MySQL分页查询
查看>>
mysql列转行函数是什么
查看>>
mysql创建函数报错_mysql在创建存储函数时报错
查看>>
mysql创建数据库和用户 并授权
查看>>
mysql创建数据库指定字符集
查看>>
MySql创建数据表
查看>>
MySQL创建新用户以及ERROR 1396 (HY000)问题解决
查看>>
MySQL创建用户报错:ERROR 1396 (HY000): Operation CREATE USER failed for 'slave'@'%'
查看>>
mysql加强(3)~分组(统计)查询
查看>>
mysql加强(4)~多表查询:笛卡尔积、消除笛卡尔积操作(等值、非等值连接),内连接(隐式连接、显示连接)、外连接、自连接
查看>>
mysql加强(5)~DML 增删改操作和 DQL 查询操作
查看>>
mysql加强(6)~子查询简单介绍、子查询分类
查看>>
mysql加强(7)~事务、事务并发、解决事务并发的方法
查看>>
mysql千万级大数据SQL查询优化
查看>>
MySQL千万级大表优化策略
查看>>
MySQL单实例或多实例启动脚本
查看>>
MySQL压缩包方式安装,傻瓜式教学
查看>>
MySQL原理、设计与应用全面解析
查看>>
MySQL原理简介—1.SQL的执行流程
查看>>
mysql参考触发条件_MySQL 5.0-触发器(参考)_mysql
查看>>