快速排序

实现思路:把第一个元素作为标记,依次判断后续的值,如果小于它则放在左边,如果大于它则放右边,同理把左右两部分看成一个整体一直递归,最后再数组拼接起来

它的最优时间复杂度为O(nlogn)【以标记元素为中心,正好每次左右都能均匀分配】,最糟糕时间复杂度为O(n^2)【标记元素每次是最大或最小值,使所有数都划分到一边】

function quickSort($arr)
{
$count = count($arr); //统计出数组的长度
if ($count <= 1) { // 如果个数为空或者1,则原样返回数组
return $arr;
}
$index = $arr[0]; // 把第一个元素作为标记
$left = []; //定义一个左空数组
$right = []; //定义一个有空数组
for ($i = 1; $i < $count; $i++) { //从数组的第二数开始与第一个标记元素作比较
if ($arr[$i] < $index) { //如果小于第一个标记元素则放进left数组
$left[] = $arr[$i];
} else { //如果大于第一个标记元素则放进right数组
$right[] = $arr[$i];
}
}
$left = quickSort($left); //把left数组再看成一个新参数,再递归调用,执行以上的排序
$right = quickSort($right); //把right数组再看成一个新参数,再递归调用,执行以上的排序
return array_merge($left, [$arr[0]], $right); //最后把每一次的左数组、标记元素、右数组拼接成一个新数组
} $arrtest=[12,43,54,33,23,14,44,53,10,3,56]; //测试数组
$res=quickSort($arrtest);
var_dump($res);

冒泡排序

实现思路:每次从数组里面选出一个最大值,一直递归

它的最优时间复杂度为O(n)【正序,数组排好情况下】,最糟糕时间复杂度为O(n^2)【反序:数组排序刚好相反】

function bubbleSort($arr)
{
$count = count($arr); //统计出数组的长度
for ($i = 1; $i < $count; $i++) { //控制需要排序的轮数,该例子共需要比较10轮
for ($j = 0; $j < $count - $i; $j++) { //控制每一轮需要比较的次数,每轮选出最大的一个值放在最后
if ($arr[$j] > $arr[$j+1]) {
$temp = $arr[$j]; //通过$temp介质把大的值放在后面
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr; //返回最终结果
} $arrtest=[12,43,54,33,23,14,44,53,10,3,56]; //测试数组
$res=bubbleSort($arrtest);
var_dump($res);

  

php实现快速排序和冒泡排序的更多相关文章

  1. 使用JAVA直观感受快速排序与冒泡排序的性能差异

    初学算法,肯定会编写排序算法 其中两个最为有名的就是冒泡排序和快速排序 理论上冒泡排序的时间复杂度为O(N^2),快速排序的时间复杂度为O(NlogN) 下面本门使用JAVA,分别编写三段排序程序 对 ...

  2. Python之排序算法:快速排序与冒泡排序

    Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...

  3. javascript版快速排序和冒泡排序

    var sort = (function () { //快速排序 var quickSort = { partition: function (array, low, high) { if (low ...

  4. c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法

    本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...

  5. JS实现快速排序,冒泡排序

    JS-排序详解-冒泡排序   说明 时间复杂度指的是一个算法执行所耗费的时间 空间复杂度指运行完一个程序所需内存的大小 稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面 不稳定指,如果a=b, ...

  6. PHP算法排序之快速排序、冒泡排序、选择排序、插入排序性能对比

    <?php //冒泡排序 //原理:从倒数第一个数开始,相邻的两个数比较,后面比前面的小,则交换位置,一直到比较第一个数之后则最小的会排在第一位,以此类推 function bubble_sor ...

  7. PHP算法之快速排序、冒泡排序

    快速排序 <?php Class Sort { //快速排序 public function quickly($array) { //判断排序的数组是否大于1 if (count($array) ...

  8. Java 快速排序法 冒泡排序法 选择排序法 插入排序法

    1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...

  9. 使用Erlang实现简单的排序算法:快速排序,冒泡排序,插入排序

    [排序算法] -module(sort). -compile(export_all). %%快速排序 qsort([]) -> []; qsort([Pivot|T]) -> qsort( ...

随机推荐

  1. python之九九乘法表

    for i in range(1,10): print( ) for j in range(1,i+1): print('%d*%d=%d '%(i,j,i*j),end="") ...

  2. Selenium封装

    import os from selenium import webdriver from selenium.webdriver.common.by import By from selenium.w ...

  3. chromedriver linux windows各版本下载地址

    taobao镜像:https://www.baidu.com/link?url=gV12RWo7v_F-BDncFNKv_Rk9jF2nMix3Z7yMd84c2QvIB0LqcwxMxTPMUyb0 ...

  4. 使用Apache HttpClient 4.x进行异常重试

    在进行http请求时,难免会遇到请求失败的情况,失败后需要重新请求,尝试再次获取数据. Apache的HttpClient提供了异常重试机制,在该机制中,我们可以很灵活的定义在哪些异常情况下进行重试. ...

  5. HDU 3938 Portal (离线并查集,此题思路很强!!!,得到所谓的距离很巧妙)

    Portal Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  6. VS Code 常用插件列表

    插件列表 Auto Close Tag 自动闭合HTML标签 Auto Rename Tag 修改HTML标签时,自动修改匹配的标签 Bookmarks 添加行书签 Can I Use HTML5.C ...

  7. everything对已经不存在的文件还进行索引,报错“系统找不到指定的驱动器”

    使用everything时,总是报下面的错.也就是对于已经不存在的文件或者文件夹还保留着对应的索引. 如下图: 这个其实我们在选项中设置一下规则就可以了. 一. 二. 三. ok啦.

  8. JSON在Java中的使用(一)

    1.去JSON官网下载org.json包 https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.json%22%20AND%20a%3A%22 ...

  9. Linux vi编辑器使用技巧

    vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器.Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能. ...

  10. Delphi 高效读写锁

    本人设计了一个高效读写锁,可实现多个线程读一个线程写的锁,应该比Delphi自带的读写锁高效,本人没有做对比测试. 本文的锁不可以在一个线程里重入,否则会锁死,另外读写锁最多支持65535个线程同时读 ...