博客
关于我
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/

你可能感兴趣的文章
NFS
查看>>
nfs mount 故障 mount.nfs: access denied by server while mounting 10.0.100.208:/backup_usb
查看>>
NFS Server及Client配置与挂载详解
查看>>
NFS 服务配置篇
查看>>
NFS共享文件系统搭建
查看>>
nfs复习
查看>>
NFS安装配置
查看>>
NFS服务器配置-服务启动与停止
查看>>
NFS的安装以及windows/linux挂载linux网络文件系统NFS
查看>>
NFS的常用挂载参数
查看>>
NFS网络文件系统
查看>>
NFS远程目录挂载
查看>>
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
NFV商用可行新华三vBRAS方案实践验证
查看>>
ng build --aot --prod生成文件报错
查看>>
ng 指令的自定义、使用
查看>>
ng6.1 新特性:滚回到之前的位置
查看>>
nghttp3使用指南
查看>>
【Flink】Flink 2023 Flink 自动化运维的大规模落地实践
查看>>
Nginx
查看>>