首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python实现快速排序

今天看了下《算法新解》这本书,很薄一本书,最开始吸引我有两点,一个是里面的大量图,内容相对来说比较清新,第二个是里面的代码是基于Python实现。...尽管算法和语言关联实现差别不是很大,重在思想,我是希望直接一些,能看到最直接就懒得转换了。 看这本书时候有几个瞬间突然有顿悟感觉。...算法是程序员一大利器,做一件事情实现方式有很多,但是如何平衡找到最合适方法却很难。...记得大学看一个算法,花了好几个小时,结果上课时候,老师花了不到五分钟就讲完了,然后脑袋一片空白,记得当时学快速排序时候,感觉这个算法应该是很复杂,感觉理解了,但是很快就忘记了。...使用循环,程序性能可能而更好,但是使用递归,程序更容易理解。 对于快速排序,算法思考方式就是由简到难。

93470

快速排序四种python实现

快速排序算法,简称快排,是最实用排序算法,没有之一,各大语言标准库排序函数也基本都是基于快排实现。 本文用python语言介绍四种不同快排实现。 1....用栈实现非递归快排程序 先说两句题外话,一般意义上栈有两层含义,一层是后进先出数据结构栈,一层是指函数内存栈,归根结底,函数内存栈结构就是一个后进先出栈。...不知道与栈存储空间相对堆存储空间,其组织结构是否也是一个完全二叉树呢? 高级语言将递归转换为迭代,用也是栈,需要考虑两个问题: 1)栈里边保存什么? 2)迭代结束条件是什么?...栈里边保存的当然是需要迭代函数参数,结束条件也是跟需要迭代参数有关。对于快速排序来说,迭代参数是数组上边界low和下边界high,迭代结束条件是low == high。...中访问是最后一个元素,所以如果程序写错了,可能其他语言会报错,但python会输出一个错误结果。

5.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

看图学NumPy:掌握n维数组基础知识点,看这一篇就够了

因此,常见做法是定义一个Python列表,对它进行操作,然后再转换为NumPy数组,或者用np.zeros和np.empty初始化数组,预分配必要空间: ?...不过排序函数功能比Python列表对应函数更少: ? 搜索向量中元素 与Python列表相反,NumPy数组没有index方法。 ?...不过NumPy具有多个函数,允许按列进行排序: 1、按第一列对数组排序:a[a[:,0].argsort()] ? argsort排序后,此处返回原始数组索引数组。...此技巧可以重复,但是必须小心,以免下一个排序混淆前一个排序结果: a = a[a[:,2].argsort()]a = a[a[:,1].argsort(kind=’stable’)]a = a...如果不方便使用axis,可以将数组转换硬编码为hstack形式: ? 这种转换没有实际复制发生。它只是混合索引顺序。 混合索引顺序另一个操作是数组置。检查它可能会让我们对三维数组更加熟悉。

5.9K20

图解NumPy:常用函数内在机制

NumPy 数组和 Python 列表 乍一看,NumPy 数组与 Python 列表类似。它们都可作为容器,能够快速获取和设置元素,但插入和移除元素会稍慢一些。...(其中 .5 会被舍掉) NumPy 也能执行基础统计运算: NumPy 排序函数没有 Python 排序函数那么强大: Python 列表与 NumPy 数组排序函数对比 在一维情况下,如果缺少...二维情况则会更困难一些(人们正在请求这一功能)。 搜索向量中元素 与 Python 列表相反,NumPy 数组没有索引方法。人们很久之前就在请求这个功能,但一直还没实现。...但幸运是,NumPy 提供了一些支持按列排序辅助函数——或有需要的话可按多列排序: 1. a[a[:,0].argsort()] 可按第一列对数组排序: 这里 argsort 会返回原数组排序索引数组...这个技巧可以重复,但必须谨慎,别让下一次排序扰乱上一次排序结果: a = a[a[:,2].argsort()] a = a[a[:,1].argsort(kind='stable')] a = a[

3.2K20

图解NumPy:常用函数内在机制

NumPy 数组和 Python 列表 乍一看,NumPy 数组与 Python 列表类似。它们都可作为容器,能够快速获取和设置元素,但插入和移除元素会稍慢一些。...(其中 .5 会被舍掉) NumPy 也能执行基础统计运算: NumPy 排序函数没有 Python 排序函数那么强大: Python 列表与 NumPy 数组排序函数对比 在一维情况下,如果缺少...二维情况则会更困难一些(人们正在请求这一功能)。 搜索向量中元素 与 Python 列表相反,NumPy 数组没有索引方法。人们很久之前就在请求这个功能,但一直还没实现。...但幸运是,NumPy 提供了一些支持按列排序辅助函数——或有需要的话可按多列排序: 1. a[a[:,0].argsort()] 可按第一列对数组排序: 这里 argsort 会返回原数组排序索引数组...这个技巧可以重复,但必须谨慎,别让下一次排序扰乱上一次排序结果: a = a[a[:,2].argsort()] a = a[a[:,1].argsort(kind='stable')] a = a[

3.6K10

Python数据分析 | Numpy与2维数组操作

二、轴参数 在很多矩阵运算操作中,NumPy可以实现跨行或跨列操作。为了适用任意维数数组,NumPy引入了axis概念。...可以使用np.reshape将一维矢量转换为这种形式,使用np.squeeze可将其恢复。这两个功能都通过view发挥作用。...但好在NumPy提供了其他功能,这些功能允许按一列或几列进行排序: 1、a[a [:,0] .argsort()]表示按第一列对数组进行排序: [957cf897dcc850eb0e3f40d4650e773e.png...] 其中,argsort返回排序原始数组索引数组。...本系列教程涉及速查表可以在以下地址下载获取: NumPy速查表 Pandas速查表 Matplotlib速查表 Seaborn速查表 拓展参考资料 NumPy教程 Python NumPy教程 ShowMeAI

1.6K41

Numpy入门教程:06. 排序,搜索和计数

参考链接: Numpy 排序,搜索和计数 背景  什么是 NumPy 呢?  NumPy 这个词来源于两个单词 – Numerical和Python。...其是一个功能强大 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景:  执行各种数学任务,如:数值积分、微分、内插、外推等。...因此,当涉及到数学任务时,它形成了一种基于 Python MATLAB 快速替代。计算机中图像表示为多维数字数组。NumPy 提供了一些优秀库函数来快速处理图像。...axis:排序沿数组(轴)方向,0表示按行,1表示按列,None表示展开来排序,默认为-1,表示沿最后排序。...【例】对数组沿给定轴执行间接排序,并使用指定排序类型返回数据索引数组。这个索引数组用于构造排序数组。

40800

数据科学 IPython 笔记本 9.10 数组排序

9.10 数组排序 本节是《Python 数据科学手册》(Python Data Science Handbook)摘录。...幸运是,Python包含内置排序算法,这些算法比刚刚展示任何简单算法都高效得多。 我们将首先查看 Python 内置函数,然后查看 NumPy 中包含,并针对 NumPy 数组优化例程。...NumPy快速排序:np.sort和np.argsort 尽管 Python 内置了sort和sorted函数来处理列表,但我们不会在这里讨论它们,因为 NumPy np.sort函数效率更高,...默认情况下,np.sort使用O(nlogn)快速排序算法,但归并排序和堆排序也可用。 对于大多数应用程序,默认快速排序绰绰有余。...虽然这种方法广播和逐行排序,可能看起来不像编写循环那么简单,但事实证明,这是在 Python 中对这些数据进行操作一种非常有效方法。

1.8K10

深度学习基础之numpy,小白轻松入门numpy,送书了!!!

1、numpy 安装 pip install numpy 2、快速入门 2.1 数据类型 用过C语言基本上都知道是哪几个类型,毕竟python是c 实现 总结一下:u表示无符号,有符号则没有,中间表示类型类型...,最后一个是表示字节数 2.2 最重要对象Ndarray 对象 Ndarray 可以理解为Java里面List 实现,封装了更好接口和api。...3、numpy 常用操作 1.创建 ndarray import numpy as np #将列表和 元组转换为ndarray x = [1,2,3] a = np.asarray(x) print...操作函数 numpy.sort() 函数返回输入数组排序副本 numpy.argsort() 函数返回是数组值从小到大索引值 numpy.lexsort() 用于对多个序列进行排序。...把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后列 #!

83120

Numpy索引与排序

花哨索引探索花哨索引组合索引Example:选择随机点利用花哨索引修改值数组排序Numpy快速排序:np.sort,np.argsort部分排序:分割 花哨索引 花哨索引和前面那些简单索引非常类似...另一个可以实现该功能类似方法是通用函数中 reduceat() 函数, 你可以在 NumPy 文档中找到关于该函数更多信息。...可以在 Python 中仅用几行代码来实现: # 用Python代码实现选择排序 import numpy as np def selection_sort(x): for i in range...中快速排序:np.sort,np.argsort 默认情况下, np.sort 排序算法是 快速排序, 其算法复杂度为[N log N], 另外也可以选择归并排序和堆排序。...对于大多数应用场景, 默认快速排序已经足够高效了。

2.4K20

pythonNumPy使用

参考链接: Pythonnumpy.compress Numpy 主要用途是以数组形式进行数据操作。 机器学习中大多数操作都是数学操作,而 Numpy 使这些操作变得简单!...对于下面的方法在那里也相应功能numpy:all,any,argmax, argmin,argpartition,argsort,choose, clip,compress,copy,cumprod,...ndarray.itemset(*args) 将标量插入数组(如果可能,将标量转换为数组dtype)ndarray.tostring([order]) 构造包含数组中原始数据字节Python字节。...ndarray.sort([axis, kind, order]) 就地对数组进行排序。ndarray.argsort([axis, kind, order]) 返回将对此数组进行排序索引。...a = np.array( [20,30,40,50] ) b = np.array( [0, 1, 2, 3] ) c = a * b c = [0, 30, 80, 150] # numpy 中有许多快速有用函数

1.7K00

Numpy进阶之排序小技巧

Numpy提供了大量用数组操作函数,其中不乏常见排序函数。 这里讲下numpy.sort、numpy.argsortnumpy.lexsort三种排序函数用法。...1、如何对数组元素进行快速排序? 使用numpy.sort函数可以对数组进行排序,并返回排序数组。...numpy.argsort函数用于将数组排序后,返回数组元素从小到大依次排序所有元素索引。...使用方法(和sort类似): numpy.argsort(a, axis=-1, kind=None, order=None) 参数: a : 要排序数组; axis :按什么轴进行排序,默认按最后一个轴进行排序...keys参数必须是可以转换为相同形状数组对象序列。 如果为keys参数提供了2D数组,则将其行解释为排序键,并根据最后一行,倒数第二行等进行排序

84840

python中一些数据处理库

参考链接: Pythonnumpy.isneginf numpy  NumpyPython一个很重要第三方库,很多其他科学计算第三方库都是以Numpy为基础建立。...  1、sort排序 返回结果是从小到大排列 2、argsort 函数 argsort 返回从小到大排列在数组中索引位置  对于多维数组,sort方法默认沿着最后一维开始排序:  3、searchsorted...改变形状 a.swapaxes(axis1, axis2) 交换两个维度位置 a.transpose(*axex) 交换所有维度位置 a.T 置,a.transpose() a.squeeze()...() 转换为字符串 a.astype(dtype) 转化为指定类型 a.byteswap(False) 转换大小字节序 a.view(type_or_dtype) 生成一个使用相同内存,但使用不同表示方法数组...a.nonzero() 返回所有非零元素索引 a.sort(axis=-1) 沿某个轴排序 a.argsort(axis=-1) 沿某个轴,返回按排序索引 a.searchsorted(b) 返回将

81340

NumPy 1.26 中文官方指南(三)

a.sort(axis=1) 对二维数组 a 每一行进行排序 [b,I]=sortrows(a,1) I = np.argsort(a[:, 0]); b = a[I,:] 将数组 a 按照第一列排序后保存为数组...NumPy 数组切片使用传址,不会复制参数。切片操作是对数组视图。 大致等价物 下表列出了一些常见 MATLAB 表达式大致等价物。这些是相似的表达式,而不是等价物。详情请参见文档。...2) np.sort(a, axis=1)或a.sort(axis=1) 对 2D 数组a每一行进行排序 [b,I]=sortrows(a,1) I = np.argsort(a[:, 0]); b...=1) 对 2D 数组a每一行排序 [b,I]=sortrows(a,1) I = np.argsort(a[:, 0]); b = a[I,:] 将数组a按第一列排序后保存为数组b x = Z\y...包装三种方式 - 入门指南 快速方式 明智做法 快速又聪明方式 F2PY 用户指南 包装三种方式 - 入门指南 快速方式 明智做法 快速又聪明方式

17210

Python进阶之NumPy快速入门(四)

引言 NumPyPython一个扩展库,负责数组和矩阵运行。相较于传统PythonNumPy运行效率高,速度快,是利用Python处理数据必不可少工具。...前面课程: NumPy快速入门(一) NumPy快速入门(二) NumPy快速入门(三) 小提示:这篇文章采用了微信公众号自带代码块功能,可以刷动屏幕查看被隐藏在屏幕右边代码哦。...运行结果: [[3 7] [1 9]] [[3 1] [9 7]] [[3 7] [1 9]] numpy.argsort() 函数返回是数组值从小到大索引值。...b = np.array([3, 1, 2]) print (np.argsort(b)) print (b[np.argsort(b)]) 讲解:对于数组b我们先给出排序索引顺序。...按照从小到大顺序,结果应该是[1,2,0]。因为最小数字是b[1],中间大数字是b[2],最大数字是b[0]。如果你把排序索引作为b新索引,就可以实现对b排序

82030

NumPy基础

>一书非常注重实践,对每个算法实现和使用示例都提供了python实现。在阅读代码过程中,发现对NumPy有一定了解有助于理解代码。...NumpPy包含两种基本数据类型:数组和矩阵,二者在处理上稍有不同。 NumPy数组 NumPy数据处理 与标准python不同,使用NumPy处理数组中数据可以省去循环语句。...= 1 (dim 0)>>> mm * ss.T matrix([[14]]) 其中.T方法完成了ss置。...要实现数组那样相乘,可以通过multiply函数实现: >>> np.multiply(mm, ss) matrix([[1, 4, 9]]) 排序 sort()方法用于排序,在原地进行,这意味着排序结果占用原始存储空间...argsort()方法得到矩阵中每个元素排序序号: >>> dd = np.mat([4, 5, 1]) >>> dd.argsort() matrix([[2, 0, 1]]) >>> dd.sort

52220
领券