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

你可能感兴趣的文章
Node-RED订阅MQTT主题并调试数据
查看>>
Node-RED通过npm安装的方式对应卸载
查看>>
node-request模块
查看>>
node-static 任意文件读取漏洞复现(CVE-2023-26111)
查看>>
Node.js 8 中的 util.promisify的详解
查看>>
node.js debug在webstrom工具
查看>>
Node.js Event emitter 详解( 示例代码 )
查看>>
Node.js GET、POST 请求是怎样的?
查看>>
Node.js HTTP模块详解:创建服务器、响应请求与客户端请求
查看>>
Node.js RESTful API如何使用?
查看>>
node.js url模块
查看>>
Node.js Web 模块的各种用法和常见场景
查看>>
Node.js 之 log4js 完全讲解
查看>>
Node.js 函数是什么样的?
查看>>
Node.js 函数计算如何突破启动瓶颈,优化启动速度
查看>>
Node.js 切近实战(七) 之Excel在线(文件&文件组)
查看>>
node.js 初体验
查看>>
Node.js 历史
查看>>
Node.js 回调函数的原理、使用方法
查看>>
Node.js 在个推的微服务实践:基于容器的一站式命令行工具链
查看>>