python排序的方法,快速排序算法python代码
一、递归思想
递归思想实际上是在呼唤自己。
错误的递归。你知道问题出在哪里吗?
上图写了一个实现阶乘的简单递归函数;但是,程序会报告一个错误,并显示“最大深度执行”。这意味着这个递归的深度是有问题的。也就是说写了无限循环。一般的阶乘是3*2*1,我们的是3 * 2 * 1 * 0 *-1 *-2 …
我知道递归函数在被调用时进入调用栈,会占用内存。如果软件没有提示递归深度有问题会怎么样?会消耗大量内存,最终程序会中止进程。那么,如何防止这种问题的发生呢?写递归函数的时候,一定要注意基线条件(不调用函数的情况下)和递归条件(调用函数的情况下)一定要写。
修正阶乘递归
二。快速分类方法
总之记住快速排序法就是递归思想二分法——二分法?在规则数组中,继续寻找中值,通过与目标值比较,继续丢弃有效数组的一半。我们快速排序方法的目标是对无序数组进行排序。我们的方法是继续寻找数组中的值,通过与数组中的其他值进行比较,将它们分为小于指定值的数组low和大于指定值的数组high,对低、高数组继续做上述操作。这就是除法的思想。
因为在二分法的有序数组中,数组的中值很容易找到;但是快速排序法通常选择数组中的第一个值,因为它不知道无序数组中哪个值是中值。这样一来,算法的执行时间就会有偏差。如果我们的数组是有序数组,那么我们的划分思想是无效的。很可能所有操作都是单边进行的,算法复杂度达到了快速列的最坏时间复杂度o (n 2)。
加一集。为什么这里的时间复杂度是O(n ^ 2)?原来,关于第n个数,比较第(n-1)个数和第n个数;第n-1个的数目有(n-2)个,并与之比较;同样,比较次数的相加是(n-1)(n-2)…3)2)1=(n-1))n-1)/2=n(n-1))/2。讨论了在大O方法的情况下,时间常数大多不重要,因为算法执行多次。所以,如果n可以看作无穷大,那么上式大约是(n 2)/2。至于这里的常数系数1/2,这里的时间复杂度是o) n^2,因为在大o方法中忽略了它。
快速排序法的一般时间复杂度是多少?o(nlogn).这是因为我们用二分法(时间复杂度o(logn))处理序列的值,总共有n个值。
快速分类代码如下所示。
快速分类方法
一些注意事项:
由于快速排序法使用了递归的思想,所以首先要定义基线和递归条件,即函数调用何时停止,何时需要函数调用。
现在来普及一下python中方便的列表导出公式。if条件列表中变量的表达式。
最后,你需要返回数组,所以当你在函数中返回时,你必须把花括号放在int值a的外面。
以上是本节内容,下一节讨论算法的载体——的数据结构。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。