博客
关于我
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启动以后会自动关闭_驾照虽然是C1,一直是开自动挡的车,会不会以后就不会开手动了?...
查看>>
mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
查看>>
Mysql启动失败解决过程
查看>>
MySQL启动失败:Can't start server: Bind on TCP/IP port
查看>>
mysql启动报错
查看>>
mysql启动报错The server quit without updating PID file几种解决办法
查看>>
MySQL命令行登陆,远程登陆MySQL
查看>>
mysql命令:set sql_log_bin=on/off
查看>>
mySQL和Hive的区别
查看>>
MySQL和Java数据类型对应
查看>>
mysql和oorcale日期区间查询【含左右区间问题】
查看>>
MYSQL和ORACLE的一些操作区别
查看>>
mysql和redis之间互相备份
查看>>
MySQL和SQL入门
查看>>
mysql在centos下用命令批量导入报错_Variable ‘character_set_client‘ can‘t be set to the value of ‘---linux工作笔记042
查看>>
Mysql在Linux运行时新增配置文件提示:World-wrirable config file ‘/etc/mysql/conf.d/my.cnf‘ is ignored 权限过高导致
查看>>
Mysql在Windows上离线安装与配置
查看>>
MySQL在渗透测试中的应用
查看>>
Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误
查看>>