博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内排序之快速排序
阅读量:5347 次
发布时间:2019-06-15

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

快速排序

快速排序一轮排序的方式是找一个元素作为基准,然后将比它小的放到一边,比它大的放到另一边,对数组中所有元素进行这么一轮操作之后,这个基准元素就已经安放到“正确”的位置了,然后递归这个基准元素的左边和右边,一直递归到某次分组只有一个元素,就完成了整个数组的排序。

python代码如下:

# coding: utf-8def quick_sort(arr, left, right):    if left < right:        index = partition(arr, left, right)        quick_sort(arr, left, index)        quick_sort(arr, index + 1, right)def partition(arr, left, right):    key = arr[left]    while left < right:        while arr[right] >= key and left < right:            right -= 1        if left < right:            arr[left] = arr[right]        while arr[left] <= key and left < right:            left += 1        if left < right:            arr[right] = arr[left]    arr[left] = key    return leftif __name__ == "__main__":    a = [4, 2, 6, 1, 6, 9, 0]    print(a)    quick_sort(a, 0, len(a)-1)    print(a)

这段代码是比较常见的递归实现,思路是先把数组最左边的值作为key存起来,然后从右边开始,将小于等于key的值赋给left,从左边开始,将大于等于key的值赋给right,左右向中间趋近,直到left==right,将key回填回left==right这个坑(这时,key的位置已经是它最终的"正确位置",小伙伴们,想想这是为什么), 然后返回left(也可以返回right,他俩是一样的),外层函数再根据partiion返回的left(right), 递归左边和右边。

转载于:https://www.cnblogs.com/becker/p/9149716.html

你可能感兴趣的文章
mysql 开启缓存
查看>>
rm 删除文件太多
查看>>
学习计算机编程语言的要点
查看>>
Xcode8如何创建Framework静态SDK库
查看>>
Android自定义View之ProgressBar出场记
查看>>
能上QQ无法上网
查看>>
Android ViewGroup事件分发机制
查看>>
android onTouch()与onTouchEvent()的区别
查看>>
OPENCV3.1+VS 坑我笔记!
查看>>
数据库篇(二、MySQL数据库的下载与安装)
查看>>
利用Github Pages建立仓库“门面”
查看>>
老笔记整理七:高斯分布解决随机圆分布问题
查看>>
loop
查看>>
POJ 1797 Heavy Transportation
查看>>
css之IE透明度
查看>>
嵌入式系统C编程之错误处理
查看>>
机器学习:贝叶斯分类器
查看>>
简单透彻理解JSONP原理及使用
查看>>
LOJ.2585.[APIO2018]新家(二分 线段树 堆)
查看>>
JVM内存管理机制
查看>>