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- ...
随机推荐
- 深入理解openstack网络架构(4)-----连接到public network
原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture3 译文转自:http://b ...
- Ubuntu Server 15.04的安装
U盘启动工具的制作就跟Windows系统以及Linux各版本的desktop版不同,用的工具也是我第一次见到的“Win32_Disk_Imager”(点击下载) 安装过程请参考:http://www. ...
- java Map及Map.Entry详解
Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet()等方法. keySet()方法返回值是Map中key值的集合:e ...
- WPF,Silverlight与XAML读书笔记第四十七 - Silverlight与浏览器
说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. 这部分内容主要介绍Silverlight与浏 ...
- WPF,Silverlight与XAML读书笔记第四十三 - 多媒体支持之文本与文档
说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. Glyphs对象(WPF,Silverlig ...
- js模版引擎handlebars.js实用教程——if-判断的基本用法
返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...
- InputStream与InputStreamReader的区别
InputStream是字节流,多用于读取二进制数据 InputStreamReader是字符流,多用于读取文本文件.有不同的编码方式,如utf8等.可以在构造的时候指定编码方式. 例如,两者都有一个 ...
- IOS UIView 03- 自定义 Collection View 布局
注:本人是翻译过来,并且加上本人的一点见解. 前言 UICollectionView 在 iOS6 中第一次被引入,也是 UIKit 视图类中的一颗新星.它和 UITableView 共享一套 API ...
- iis日志查看
IIS日志是每个服务器管理者都必须学会查看的,服务器的一些状况和访问IP的来源都会记录在IIS日志中,所以IIS日志对每个服务器管理者非常的重要,seoer也不例外,这点同时也可方便网站管理人员查看网 ...
- Oracle动态执行语句
一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:D ...