PHP算法学习(3) 冒泡排序
2019年1月15日10:49:52
<?php /*
* 冒泡排序
*/ class BubbleSort {
/*
* 基础排序
*/ public static function BasicBubbleSort(array $arr) {
$length = count($arr);
//外层控制排序轮次
for ($outer = 0; $outer < $length; $outer++) {
// 和后面紧跟着的第一个数字开始一直到末尾最后一个数字,比赛大小
//内层控制每轮比较次数
for ($inner = $outer + 1; $inner < $length; $inner++) {
// 如果比后面的数字大,那么二者交换一下座位
if ($arr[$outer] > $arr[$inner]) {
$temp = $arr[$outer];
$arr[$outer] = $arr[$inner];
$arr[$inner] = $temp;
}
}
}
return $arr;
} public static function BetterBubbleSort(array $arr) {
$length = count($arr);
// 外部循环
$swap = true;
for ($outer = 0; $outer < $length && $swap; $outer++) {
$swap = false;
// 当外部循环开始第一轮的时候,从倒数第一位开始往前对比,一直到与正数第一位比较完后终止
// 当外部循环开始第一轮的时候,从倒数第一位开始往前对比,一直到与正数第二位比较完后终止
for ($inner = $length - 1; $inner > $outer; $inner--) {
if ($arr[$inner] < $arr[$inner - 1]) {
$temp = $arr[$inner];
$arr[$inner] = $arr[$inner - 1];
$arr[$inner - 1] = $temp;
$swap = true;
}
}
}
return $arr;
} /*
* 还原原有数据,冒泡排序,借助php原生函数做,如果数据里有相同元素也可以,这个才是完整还原最大元素压入队收,就像气泡一个一个往上浮
* 其实还有更简单的原生方法 sort() - 以升序对数组排序
rsort() - 以降序对数组排序
asort() - 根据值,以升序对关联数组进行排序
ksort() - 根据键,以升序对关联数组进行排序
arsort() - 根据值,以降序对关联数组进行排序
krsort()
*/ public static function BubbleSort1(array $arr) {
$array = [];
$length = count($arr);
for ($i = 0; $i < $length; $i++) {
//查出最大的元素值,也可以使用min也是一样的
$max = max($arr);
$pos = array_search($max, $arr);
array_unshift($array, $arr[$pos]);
unset($arr[$pos]);
}
return $array;
} }
PHP算法学习(3) 冒泡排序的更多相关文章
- 算法学习之冒泡排序的C实现
冒泡排序是属于比较类的排序方式,简单易懂,但是效率不是很高,不及快排. #include "stdio.h" #include "time.h" void bu ...
- Python之路,Day21 - 常用算法学习
Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- 算法学习之快速排序的C语言实现
近几天在学习简单算法,今天看了一个快速排序和堆排序,堆排序还没搞懂,还是先把快速排序搞清楚吧 教程网上一艘一大堆,这里选择一个讲的比较通俗的的一个吧: http://blog.csdn.net/mor ...
- JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- Hark的数据结构与算法练习之冒泡排序
算法说明: 冒泡排序实际上是使用的最多的排序,逻辑是循环然后对相邻的数字进行比较,并交换数据. 例如有一个数组int[] arrayData = { 2, 3, 1, 5, 6, 7, 4, 65, ...
- DSP算法学习-过采样技术
DSP算法学习-过采样技术 彭会锋 2015-04-27 23:23:47 参考论文: 1 http://wr.lib.tsinghua.edu.cn/sites/default/files/1207 ...
- 算法学习之C语言基础
算法学习,先熟悉一下C语言哈!!! #include <conio.h> #include<stdio.h> int main(){ printf(+); getch(); ; ...
- C / C++算法学习笔记(8)-SHELL排序
原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...
- 算法学习之BFS、DFS入门
算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...
随机推荐
- MySQL学习9 - 单表查询
一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit ...
- Codeforces 1060E(dfs计数)
题目链接 题意 给一棵树,对于一个节点,与它相邻的结点可以连一条边,求所有点对间距离之和 思路 任意两点间的距离被优化为$\left \lceil \frac{s}{2} \right \rceil$ ...
- webpack构建Vue工程
先开始webpack基本构建 创建一个工程目录 vue-structure mkdir vue-structure && cd vue-structure 安装webpack ...
- 安装vs2017后造成无法打开xproj项目无法打开
安装vs2017后,再用vs2015打开xproj项目的时候会报错: Error MSB4019 The imported project "C:\Program Files\dotnet\ ...
- android TabLayout设置选中标签字体加粗功能
实现 TabLayout 选中tab标签字体加粗功能如下: xml文件中定义: <android.support.design.widget.TabLayout android:id=" ...
- wireshark如何抓取localhost包
1.首先安装NPCAP 下载地址:https://nmap.org/download.html 安装时,记得勾上最后一个选项:wincap模式 安装完成后,一定要重启系统 2.安装wireshark ...
- 【python】flask+nginx配置
背景信息 有wordpress服务A 有flask服务B, gunicorn启动,8个进程 用nginx代理,实现访问A然后跳转到B 问题 flask服务B上有文件上传操作,用nginx后发现无法上传 ...
- 批量执行 sql 的 shell 脚本
最近有用到需要批量导入N个表的sql,一个个导入会吐老血的,写了个shell脚本,便捷导入. 通常我们导入单个sql,可以用 $mysql -uroot -p world < xxxx.sql ...
- beta冲刺1/7
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(1/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 团队完成测试答辩 整理博客 复习接口 接下来的 ...
- Swift GCD的使用1
typealias Task = (cancel : Bool) -> () func delay(time : NSTimeInterval, task : () -> ()) -> ...