php的四种基本算法
/* 冒泡算法:结果从小到大,规则类似波浪推动的沙滩,先初始阈值为 0,初始第一次波浪之后,如果发现有左值比右边的大,就改变阈值并且完成波浪推动,重新初始化阈值为0,如此往复,直到没有阈值改变的情况出现,说明沙滩平滑,阈值无需再改,无需推动波浪了。
* @para $arr 传入进去排序的数组
* @return $newArr 排序之后的数组
*/
function maopao($arr)
{
//一共是多少趟
for($i = count($arr)-1; $i>0; $i--){
$flag = 0;
//每一趟进行相邻两个数进行比较
for($j = 0; $j < $i; $j++){
if($arr[$j]>$arr[$j+1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] =$temp;
$flag = 1;
}
}
if($flag == 0){
break;
}
}
return $arr;
}
/**快速排序:通过递归来实现,递归发生的子规则是:以第一个元素为基,比基数大的过滤到新生为左的数组,比基数小的过滤到新生为右的数组----递归调用该规则一直到子底层,然后开始回层合并(左数组,基数,右数组)
* @param $arr
* @return array
*/
function quickSort($arr)
{
//先判断是否需要继续进行
$length = count($arr);
if($length <= 1) {
return $arr;
}
//选择第一个元素作为基准
$base_num = $arr[0];
//遍历除了标尺外的所有元素,按照大小关系放入两个数组内
//初始化两个数组
$left_array = array(); //小于基准的
$right_array = array(); //大于基准的
for($i=1; $i<$length; $i++) {
if($base_num > $arr[$i]) {
//放入左边数组
$left_array[] = $arr[$i];
} else {
//放入右边
$right_array[] = $arr[$i];
}
}
//再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数
$left_array = quick_sort($left_array);
$right_array = quick_sort($right_array);
//合并
return array_merge($left_array, array($base_num), $right_array);
}
/**插入排序(蠕虫排序):初始化以数组中第一个元素为【既定结果数组】中的一个元素,然后取【既定结果数组】之后的值在【既定结果数组】中从末尾向头部开始比较,如果该值没有尾部的值大,就模拟蠕动,使该值向【既定结果数组】头部前进再次与左邻的元素值比较,如此往复,直到碰到比该值小的存在才停止蠕动;;循环调用该规则,直到所有元素蠕动一遍完成排序。
* @param $arr
* @return mixed
*/
function insertSort($arr)
{
$len=count($arr);
for($i=1; $i<$len; $i++) {
$tmp = $arr[$i];
//内层循环控制,比较并插入
for($j=$i-1;$j>=0;$j--) {
if($tmp < $arr[$j]) {
//发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
} else {
//如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
break;
}
}
}
return $arr;
}
/**选择排序:有着枚举思想,虚拟该数组为两部分,初始第一部分数组只有一个元素(随外循环,不断增大),不停枚举第二部分数组元素(随外循环,不断减小)中的最小值与第一部分数组最后一个元素进行换位,换位结束则排序完成。
* @param $arr
* @return mixed
*/
function selectSort($arr)
{
//双重循环完成,外层控制轮数,内层控制比较次数
$len=count($arr);
for($i=0; $i<$len-1; $i++) {
//先假设最小的值的位置
$p = $i;
for($j=$i+1; $j<$len; $j++) {
//$arr[$p] 是当前已知的最小值
if($arr[$p] > $arr[$j]) {
//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
$p = $j;
}
}
//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
if($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
//返回最终结果
return $arr;
}
php的四种基本算法的更多相关文章
- php 冒泡 快速 选择 插入算法 四种基本算法
php四种基础算法:冒泡,选择,插入和快速排序法 来源:PHP100中文网 | 时间:2013-10-29 15:24:57 | 阅读数:120854 [导读] 许多人都说 算法是程序的核心,一个程序 ...
- PHP四种基础算法详解
许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...
- php四种基础算法:冒泡,选择,插入和快速排序法
转自:http://www.php100.com/html/php/rumen/2013/1029/6333.html 许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一 ...
- 【C++】四种排序算法的时间比较
四种排序算法的时间比较 [注]clock函数对输入(用户输入)元素N排序的计时 #include<iostream> #include<time.h> using namesp ...
- php四种基础算法:冒泡,选择,插入和快速排序法PHP基础教程
许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西.但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要掌 ...
- 《数据结构与算法(C语言版)》严蔚敏 | 第五章 建立二叉树,并完成三/四种遍历算法
PS:所有的代码示例使用的都是这个图 2019-10-29 利用p126的算法5.3建立二叉树,并完成三种遍历算法 中序 后序 先序 #include<iostream> #include ...
- php四种排序算法实现代码
分享php排序的四种算法与代码. 冒泡:function bubble_sort($arr){ $num = count($arr); for($i=0;$i<$num;$i++){ for($ ...
- JVM的四种GC算法
程序在运行过程中,会产生大量的内存垃圾(一些没有引用指向的内存对象都属于内存垃圾,因为这些对象已经无法访问,程序用不了它们了,对程序而言它们已经死亡),为了确保程序运行时的性能,java虚拟机在程序运 ...
- php 四种基础算法 ---- 快速排序法
4.快速排序法 代码: function quick_sort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length < ...
随机推荐
- strlen的容易tle情况
for(int i=1;i<=strlen(**);i++ 这很容易tle 因为 strlen很大 int m=strlen(**)
- Qt5中的lambda表达式和使用lambda来写connect
c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11 例子: QString program = "C:/Windows/Syst ...
- Spark笔记-DataSet,DataFrame
DataSet:面向对象的,从JVM进行构建,或从其它格式进行转化 DataFrame:面向SQL查询,从多种数据源进行构建,或从其它格式进行转化 RDD DataSet DataFrame互转 1. ...
- 如何利用Skyline的TerraExplorer Pro 6.5提供的API接口实现矢量图层数据的动态投影
Skyline 支持国内常见的地图投影坐标系,包括WGS84.Beijing54.西安80.2000坐标系等,也可以自定义坐标系,比如一些做过参数变换加密的坐标系等. <!DOCTYPE htm ...
- leetcode56:Merge Intervals
大都是自定义了 Interval的比较方法. 突发奇想 int [] arr=new int[intervals.Count*2]; for(int i=0;i<intervals.Count; ...
- 【转】js 获取浏览器高度和宽度值(多浏览器
原文地址:http://www.jb51.net/article/19844.htm js获取浏览器高度和宽度值,尽量的考虑了多浏览器. IE中: document.body.clientWidth ...
- 高速LVDS电平简介
一.LVDS简介 1.1.LVDS信号介绍LVDS:Low Voltage Differential Signaling,低电压差分信号.LVDS传输支持速率一般在155Mbps(大约为77MHZ)以 ...
- VS2017上执行VS2013项目错误MSB802之解决方案
进行想把我编写的数字图像处理软件MagicHouse更新到最新的VS2017开发环境下,原来的开发环境是VS2013.但是用VS2017打开项目并编译时,系统报错误MSB802,如下图所示. 其实Vi ...
- IIR数字滤波器的实现(C语言)
经典滤波器和数字滤波器 一般滤波器可以分为经典滤波器和数字滤波器. 经典滤波器:假定输入信号中的有用成分和希望去除的成分各自占有不同的频带.如果信号和噪声的频谱相互重迭,经典滤波器无能为力.比如 FI ...
- python3 编程使用技巧
from random import randint data = {"Student{}".format(i):randint(60,100) for i in range(1, ...