PHP--冒泡、选择、插入排序法
使用php来实现常用三种排序方法:
冒泡、选择、插入中,最优的是插入排序,我就把插入排序的流程画下来了:
插入排序法的流程图:
插入排序的代码:
- function InsertSort(&$arr){
- for ($i=1;$i<count($arr);$i++){
- // 带插入的值
- $insertVal = $arr[$i];
- // 要比较的位置下标
- $insertIndex = $i -1;
- while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
- // 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
- $arr[$insertIndex+1] = $arr[$insertIndex];
- $insertIndex--;
- }
- // 插入insertVal
- if($insertIndex+1 != $i){
- $arr[$insertIndex+1] = $insertVal;
- }
- }
- }
下面的三种排序法的代码:
- <?php
- /**
- * Created by PhpStorm.
- * User: xxx
- * Date: 2016/10/12
- * Time: 21:38
- */
- // 冒泡排序法
- function maopao_sort(&$arr){
- // 外循环 控制趟数 只需要count($arr)-1趟就可以完成排序
- for($i=0;$i<count($arr)-1;$i++){
- // 内循环控制每一趟,找出最大的那个数:ccount($arr)-1-$i
- for($j=0;$j<count($arr)-1-$i;$j++){
- if ($arr[$j] > $arr[$j+1]){
- $temp = $arr[$j+1];
- $arr[$j+1] = $arr[$j];
- $arr[$j] = $temp;
- }
- }
- }
- }
- //选择排序法
- function SelectSort(&$arr){
- for($i=0;$i<count($arr)-1;$i++){
- // 假设的最小数
- $minVal = $arr[$i];
- //最小数的下标
- $minIndex = $i;
- for($j=$i+1;$j<count($arr);$j++){
- if ($minVal>$arr[$j]){
- $minVal = $arr[$j];
- $minIndex = $j;
- }
- }
- if ($i != $minIndex){
- $temp = $arr[$i];
- $arr[$i] = $minVal;
- $arr[$minIndex] = $temp;
- }
- }
- }
- // 插入排序法(小-->大)
- function InsertSort(&$arr){
- for ($i=1;$i<count($arr);$i++){
- // 带插入的值
- $insertVal = $arr[$i];
- // 要比较的位置下标
- $insertIndex = $i -1;
- while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
- // 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
- $arr[$insertIndex+1] = $arr[$insertIndex];
- $insertIndex--;
- }
- // 插入insertVal
- if($insertIndex+1 != $i){
- $arr[$insertIndex+1] = $insertVal;
- }
- }
- }
- $arr = array(10,2,0,-23,90,-100,400);
- //maopao_sort($arr);
- //SelectSort($arr);
- InsertSort($arr);
- echo var_dump($arr)."<br>";
- print_r($arr);
快速排序法:
- <?php
- 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;
- }
- }
- ?>
PHP--冒泡、选择、插入排序法的更多相关文章
- Java 快速排序法 冒泡排序法 选择排序法 插入排序法
1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...
- c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)
1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1 ...
- php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法
这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式 ...
- c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法
本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...
- 基于python语言的经典排序法(冒泡法和选择排序法)
前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...
- 选择排序法、冒泡排序法、插入排序法、系统提供的底层sort方法排序之毫秒级比较
我的代码: package PlaneGame;/** * 选择排序法.冒泡排序法.插入排序法.系统提供的底层sort方法排序之毫秒级比较 * @author Administrator */impo ...
- C# 冒泡排序法、插入排序法、选择排序法
冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序. 以从小到大排序为例. 数据 11, 35, 39, 30, 7, 36, 22, 13, 1, 38, 26, 18, 12, 5, 45, ...
- python 数据结构与算法之排序(冒泡,选择,插入)
目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...
- python 中的一些基础算法:递归/冒泡/选择/插入
递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...
随机推荐
- angularjs http 请求拦截器
/** * Created by oy on 2016/11/29. */ (function() { 'use strict'; // 创建angular模块 angular .module('ap ...
- 如何把.cs文件编译成DLL文件
开始--程序--Microsoft Visual Studio.NET 2013--Visual Studio.NET工具,点击其中的"VS2013 开发人员命令提示",就会进入M ...
- 基于ABP的应用执行Update-Database出现异常的解决办法
今天在QQ群中看到有网友在更新数据库执行Update-Database时出现下面的错误: 为了能让搜索引擎搜索到,特意加上该错误的文字说明: 在与 SQL Server 建立连接时出现与网络相关的或特 ...
- log4net按时间日期,文件大小和个数生成日志文件
从启动模板生成的基于ABP的应用默认使用的log4net日志框架,当然你也可以使用其他的日志框架. ABP默认的log4net.config配置文件配置的很简单,将所有的日志都写到了一个txt文件中, ...
- prerender-SPA程序的SEO优化策略
随着web2.0的兴起,ajax的时代已经成为了事实,更如今Knockout,backbone, angular,ember前端MDV(model driver view)框架强势而来,Single ...
- js模版引擎handlebars.js实用教程——关于HTML编码
返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...
- Windows进程通信 -- 共享内存(1)
共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 共享内存在 W ...
- JS数组的concat、push等方法,操作的是地址指针,而非内存操作
var a = [{x:1}, {y:1}, {z:3}]; var b = a.concat(['gg', 'ff']); var c = []; c.push(a[1]); console.log ...
- 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)
回到目录 之前的讲过两篇关于日志组件的文章,分别是<第一回 日志记录组件之自主的Vlog>和<第三回 日志记录组件之log4net>,而今天主要说一下我自己开发的另一种日志 ...
- MVVM架构~knockoutjs实现简单的购物车
返回目录 概念相关 购物车相信大家都用过,很方便,可以将多个商品添加到购物车,并且可以修改购买商品的数据,当然为了用户体验好,在修改数据时,你的价格也会出现变化的,这使用JS可以实现,但我认为,代码量 ...