php实现快速排序和冒泡排序
快速排序
实现思路:把第一个元素作为标记,依次判断后续的值,如果小于它则放在左边,如果大于它则放右边,同理把左右两部分看成一个整体一直递归,最后再数组拼接起来
它的最优时间复杂度为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实现快速排序和冒泡排序的更多相关文章
- 使用JAVA直观感受快速排序与冒泡排序的性能差异
初学算法,肯定会编写排序算法 其中两个最为有名的就是冒泡排序和快速排序 理论上冒泡排序的时间复杂度为O(N^2),快速排序的时间复杂度为O(NlogN) 下面本门使用JAVA,分别编写三段排序程序 对 ...
- Python之排序算法:快速排序与冒泡排序
Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...
- javascript版快速排序和冒泡排序
var sort = (function () { //快速排序 var quickSort = { partition: function (array, low, high) { if (low ...
- c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法
本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...
- JS实现快速排序,冒泡排序
JS-排序详解-冒泡排序 说明 时间复杂度指的是一个算法执行所耗费的时间 空间复杂度指运行完一个程序所需内存的大小 稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面 不稳定指,如果a=b, ...
- PHP算法排序之快速排序、冒泡排序、选择排序、插入排序性能对比
<?php //冒泡排序 //原理:从倒数第一个数开始,相邻的两个数比较,后面比前面的小,则交换位置,一直到比较第一个数之后则最小的会排在第一位,以此类推 function bubble_sor ...
- PHP算法之快速排序、冒泡排序
快速排序 <?php Class Sort { //快速排序 public function quickly($array) { //判断排序的数组是否大于1 if (count($array) ...
- Java 快速排序法 冒泡排序法 选择排序法 插入排序法
1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...
- 使用Erlang实现简单的排序算法:快速排序,冒泡排序,插入排序
[排序算法] -module(sort). -compile(export_all). %%快速排序 qsort([]) -> []; qsort([Pivot|T]) -> qsort( ...
随机推荐
- XCODE7 和IOS9适配后的一些问题
网上比较常规的几个问题就不细说了. 什么HTTPS.bitcode.什么什么的. 记录几个自己又遇到了但是网上没有说的. 启动应用报错, *** Terminating app due to unca ...
- vlc源码分析(三) 调用live555接收RTSP数据
首先了解RTSP/RTP/RTCP相关概念,尤其是了解RTP协议:RTP与RTCP协议介绍(转载). vlc使用模块加载机制调用live555,调用live555的文件是live555.cpp. 一. ...
- DPDK运行出现error while loading shared libraries的解決方法
问题 error: while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or d ...
- Hdu 5052 Yaoge’s maximum profit(树链剖分)
题目大意: 给出一棵树.每一个点有商店.每一个商店都有一个价格,Yaoge每次从x走到y都能够在一个倒卖商品,从中得取利益.当然,买一顶要在卖之前.可是没次走过一条路,这条路上的全部商品都会添加一个v ...
- Python的迭代器与装饰器
'''迭代器:两个基本方法:iter()和next()迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合等第一个元素开始访问,直到所有的元素被访问结束,迭代器只能往前不会后退. 迭代器有两个基本 ...
- C++练习 | 运算符重载练习
#include <iostream> #include <cmath> #include <cstring> #include <iomanip> u ...
- mysql使用Sql获取13位时间戳
SELECT REPLACE(unix_timestamp(current_timestamp(3)),'.','');
- Delphi RAD Server 应用服务基础平台
RAD Server是一个应用服务框架平台,可快速构建和部署应用服务.RAD Server提供自动化的Delphi和C++ REST/ JSON API的 发布与管理.企业数据库集成中间件.智能物联网 ...
- Delphi写的DLL,OCX中多线程一个同步问题
Delphi写的DLL,OCX中如果使用了TThread.Synchronze(Proc),可能导致线程死锁,原因是无法唤醒EXE中主线程, Synchronze并不会进入EXE主线程消息队列. 下面 ...
- colemak,你用了吗?
为了输入代码的感觉更好,我学习了colemak键盘布局,这个布局它是在QWERTY的基础上改了10多个键. 开始的三天,感觉非常不好,每按一个键都要思考很长时间,干脆在网上找了个在线打字的网页去练,感 ...