博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP快速排序及其时间复杂度
阅读量:6251 次
发布时间:2019-06-22

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

$r) return; $tmp_l = $l; $tmp_r = $r; $privot = $arr[$r]; while($tmp_l<$tmp_r) { while($arr[$tmp_l] < $privot && $tmp_l<$tmp_r) ++$tmp_l; //内部没有$tmp_l <$tmp_r的判断会造成$tmp_l > $tmp_r; 因为这里使用不是交换的方式,而是直接使用直接赋值的形式。 $arr[$tmp_r] = $arr[$tmp_l]; while($arr[$tmp_r] >= $privot && $tmp_l<$tmp_r) --$tmp_r; // 没有=等于的判断 会出现死循环,没有详细考究原因。 $arr[$tmp_l] = $arr[$tmp_r]; } $arr[$tmp_l] = $privot; quickSort($arr, $l, $tmp_l-1); quickSort($arr, $tmp_r+1, $r);}$arr = array(3,4,4,4,6,7,8,9,3,3,4,2,5);print_r($arr);quickSort($arr, 0, count($arr)-1);print_r($arr);

 

时间复杂度为n*logn, 解释如下

假设每次都恰好把区间分成两段:

递归第一层有一个区间,长度N,1*N=N
第二层有两个区间,长度N/2,2*N/2=N
第三层有四个区间,长度N/4,4*N/4=N
....
第logN层有N个区间,长度1,N*1=N
所以,总共扫描过的长度是N*logN

 

最坏情况 logN = N 即原数组有序时

 

转载于:https://www.cnblogs.com/sailrancho/p/3390825.html

你可能感兴趣的文章
小试 ScriptManager
查看>>
异常处理
查看>>
C/S模型之消息传输
查看>>
一道int与二进制加减题
查看>>
Java中输入判定的错误和纠正
查看>>
详解Nginx 13: Permission denied 解决方案
查看>>
InPlace Transition of a matrix
查看>>
Project Euler 26 Reciprocal cycles( 分数循环节 )
查看>>
做了几道简单的基础题,慢慢熟悉循环
查看>>
元素的多种延时等待(&页面的超时处理)
查看>>
ios 后台发送邮件之SKPSMTPMessage的使用
查看>>
JavaScript学习
查看>>
3014C语言_运算符
查看>>
202702算法_二分法查找
查看>>
Win10 UWP开发实现Bing翻译
查看>>
各种不同类型的类
查看>>
mvc4 -@Html.Partial,@Html.RenderPartial
查看>>
windows2012 r2 提高网速方法
查看>>
调试R代码中出现的常用的函数
查看>>
JavaWeb 之 AJAX
查看>>