php的一些简单算法程序(冒泡、快速等)
冒泡排序:
function buttle_sort($array) {
$len=count($array);
if($len<2){
return $array;
}
for($i=0;$i<$len;$i++){
$flag = false;//本趟排序开始前,交换标志应为假
for($j=$len-1;$j>$i;$j--){
if($array[$j]<$array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
$flag = true;//发生了交换,故将交换标志置为真
}
}
}
if(!$flag)//本趟排序未发生交换,提前终止算法
return $array;
}
选择排序
<?php
//选择排序
function selectSort($arr)
{
$count = count($arr);
if ($count < 2) {
return $arr;
}
for ($i = 0; $i < $count; $i ++) {
$min = $i;
for($j=$i + 1;$j < $count;$j++){
if ($arr[$min] > $arr[$j]) {
$min = $j; // 找到最小的那个元素的下标
}
}
if ($min != $i) { // 如果下标不是$i 则互换。
$tmp = $arr[$i];
$arr[$i] = $arr[$min];
$arr[$min] = $tmp;
}
}
return $arr;
}
冒泡排序其实上是和选择排序相比,并无明显差别。都是找到最小的,放到最左端。依次循环解决问题。差别在于冒泡排序的交换位置的次数较多,而选择排序则是找到最小的元素的下标,然后直接和最左端的交换位置。
快速排序算法:
//快速排序
function quickSort(&$arr){
if(count($arr)>1){
$k=$arr[0];
$x=array();
$y=array();
$_size=count($arr);
for($i=1;$i<$_size;$i++){
if($arr[$i]<=$k){
$x[]=$arr[$i];
}elseif($arr[$i]>$k){
$y[]=$arr[$i];
}
}
$x=quickSort($x);
$y=quickSort($y);
return array_merge($x,array($k),$y);
}else{
return$arr;
}
}
二分查找
/**二分查找:查找一个值在数组中的位置
* @$arr:操作的数组,前提是按顺序排列
* @$val:查找的值
* @$low:查找的起始位置,默认从数组的第一个数找起
* @hight:查找的结束位置**/
function binarySearch($arr, $val, $hight, $low=0){
while($low <= $hight){
$mid = ceil($low + ($hight - $low) / 2);
if($arr[$mid] == $val){
return $mid;
}elseif($arr[$mid] > $val){
$hight = $mid -1;
}else{
$low = $mid +1;
}
}
return -1;
}
php的一些简单算法程序(冒泡、快速等)的更多相关文章
- EpiiAdmin 开源的php交互性管理后台框架, 让复杂的交互变得更简单!Phper快速搭建交互性平台的开发框架,基于Thinkphp5.1+Adminlte3.0+Require.js。
EpiiAdmin EpiiAdmin php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js, 让复杂的交互变得更简单!Phper快速搭建交互性平台的 ...
- 知识点简单总结——FWT(快速沃尔什变换),FST(快速子集变换)
知识点简单总结--FWT(快速沃尔什变换),FST(快速子集变换) 闲话 博客园的markdown也太傻逼了吧. 快速沃尔什变换 位运算卷积 形如 $ f[ i ] = \sum\limits_{ j ...
- hdu4686 简单的矩阵快速幂求前n项和
HDU4686 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 题意:题目说的很清楚了,英语不好的猜也该猜懂了,就是求一个表达式的前n项和,矩阵 ...
- 《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入
好几天又没写,因为这几天很闲,平时忙的时候自己再累都不会睡着,但是呢这没事了,照理说应该是不瞌睡了,结果还睡着了. 所以说,人很贱.也验证了一句话,没有目标的人其实最无聊.人一定要有自己的工作,这工作 ...
- POJ 2115 C Looooops( 简单拓欧 + 快速幂 )
链接:传送门 题意:题目中给出一个循环 for (variable = A; variable != B; variable += C) ,这个东东还需要 mod 2^k 问至少多次能退出,如果进入死 ...
- Python - 排序( 插入, 冒泡, 快速, 二分 )
插入排序 算法分析 两次循环, 大循环对队列中的每一个元素拿出来作为小循环的裁定对象 小循环对堆当前循环对象在有序队列中寻找插入的位置 性能参数 空间复杂度 O(1) 时间复杂度 O(n^2) 详细代 ...
- JVM虚拟机知识问答总结(简单复习,快速回忆!)
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- 简单实现一个快速传输电子书到kindle的小项目
前言 最近翻出来好久没有看的kindle,准备继续我的阅读之路.当然,也是因为发现了一个非常好的获取电子书资源的网站,又燃起了我的阅读兴趣. 然而,往kindle里传输电子书的方式一共有四种: 直接在 ...
- php 冒泡 快速 选择 插入算法 四种基本算法
php四种基础算法:冒泡,选择,插入和快速排序法 来源:PHP100中文网 | 时间:2013-10-29 15:24:57 | 阅读数:120854 [导读] 许多人都说 算法是程序的核心,一个程序 ...
随机推荐
- hdoj 5288 OO’s Sequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5288 //*************头文件区************* #include<ios ...
- struts2 下载时报java.lang.IllegalStateException
-----------------------------------------struts2 下载时报java.lang.IllegalStateException---------------- ...
- My集合框架第四弹 HashTable(链表解决冲突)
package com.wpr.collection; import java.util.LinkedList; import java.util.List; public class HashTab ...
- BeanFactory和ApplicationContext的作用和区别
BeanFactory和ApplicationContext的作用和区别 作用: 1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责be ...
- mac下xampp简单虚拟主机配置
多域名,虚拟主机的配置 开启虚拟主机配置选项: 打开httpd.conf文件,找到httpd-vhosts.conf那一行,解除该行注释: 打开httpd-vhosts.conf文件 修改如下 < ...
- 不要滥用div,保持代码的整洁
这篇文章算是很基础的了.旨在介绍如何保证页面代码的整洁.以维护性.使用有语义的页面标签,减少标签的滥用. 1. 移除不必要的<div>标签 嵌套在<form><ul> ...
- ITEXT学习手册
本系列内容来自<iText in Action 2nd>,希望有时间的读者能够自己读一遍这本书 所有的文章相关的例子:IText.7z ITEXT基础 ITEXT学习手册——创建一个简单的 ...
- 将博CMS安全分析报告-橘皮书
一.使用IBM的AppScan和Acunetix应用程序漏洞扫描将博CMS5.5,得出一些漏洞. 此番扫描大小共23种类型问题,其中高危漏洞有三个,中危漏洞9个,低级漏洞11个.注意这 ...
- C# 实现对网站数据的采集和抓取
首先大家需要清楚一点的是:任何网站的页面,无论是php.jsp.aspx这些动态页面还是用后台程序生成的静态页面都是可以在浏览器中查看其HTML源文件的. 所以当你要开发数据采集程序的时候,你必须先对 ...
- linux C(hello world)最大公约数和最小公倍数
# include <stdio.h> int main(void) { int x, y,temp; int r; printf("请输入两个正整数:\n"); sc ...