<?php
//备注: 插入排序 ===> 选择排序 ===> 冒泡排序 (快->慢)
//冒泡排序 某个值比较时候,在小循环体内每次都要和后面所有值进行比较换位
//选择排序 某个值比较时,只记录更小一方的值和键 ,然后在大循环体内进行换位
//插入排序 某个值比较时,
//冒泡排序
//原理:(大-小)每次跟后面值进行比较,然后进行换位
//变量使用地址符声明,确保每次都指向同一个内存地址
function mySort(&$myarry)
{
$temp = 0; //临时变量
//循环$i<count($myarry)-1 因为最后一个不需要比较
for($i=0;$i<count($myarry)-1;$i++) {
//小循环 从第一个值开始一直向后作比较,
//$j<count($myarry)-1-$i 每次比较完后,已经比较过的值就不需要比较
for($j=0;$j<count($myarry)-1-$i;$j++) {
//如果当前值大于后面的值 则进行交互位置
if($myarry[$j]>$myarry[$j+1]) {
$temp = $myarry[$j];
$myarry[$j] = $myarry[$j+1]; //较大的值往后移动 例: $myarry[4] = 10
$myarry[$j+1] = $temp; //较小的值往前移 例: $myarry[3] = 7
}
}
}
}
// $arry = array(-1,4,2,34,81,73,92,92,-13,-33,0,283,98);
// mySort($arry);
// var_dump($arry);
//每个英文字母 对应一个数字
function compare($p)
{
$s = 0;
switch($p) {
case 'A':$s=1;break;
case 'B':$s=2;break;
case 'C':$s=3;break;
case 'D':$s=4;break;
case 'E':$s=5;break;
case 'F':$s=6;break;
case 'G':$s=7;break;
case 'H':$s=8;break;
case 'I':$s=9;break;
case 'J':$s=10;break;
case 'K':$s=11;break;
case 'L':$s=12;break;
case 'M':$s=13;break;
case 'N':$s=14;break;
case 'O':$s=15;break;
case 'P':$s=16;break;
case 'Q':$s=17;break;
case 'R':$s=18;break;
case 'S':$s=19;break;
case 'T':$s=20;break;
case 'U':$s=21;break;
case 'V':$s=22;break;
case 'W':$s=23;break;
case 'X':$s=24;break;
case 'Y':$s=25;break;
case 'Z':$s=26;break;
}
return $s;
}
//对英文字母排序-冒泡排序
function myComp(&$myarry)
{
$temp = 0;
for($i=0;$i<count($myarry)-1;$i++) {
for($j=0;$j<count($myarry)-1-$i;$j++) {
//对转换后的字母进行排序
if(compare($myarry[$j])>compare($myarry[$j+1])) {
$temp = $myarry[$j];
$myarry[$j] = $myarry[$j+1];
$myarry[$j+1] = $temp;
}
}
}
}
// $parry = array('A','C','B','N','M','D');
// myComp($parry);
// var_dump($parry);
//选择排序速度要快于 冒泡排序
//原理:(小-大)每次跟后面一个进行比较,将更小的值和键保存下来,然后进行换位
//变量使用地址符声明,确保每次都指向同一个内存地址
function selectSort(&$myarry)
{
//循环$i<count($myarry)-1 因为最后一个不需要比较
for($i=0;$i<count($myarry)-1;$i++) {
$minvalue = $myarry[$i]; //定义最小值,假设默认当前就是最小值
$minindex = $i; //定义最小值的键 ,也是假设默认当前值得键
//$j=$i+1 跟后面一个值比较
//$j<count($myarry) 每次和后面所有值进行比较
for($j=$i+1;$j<count($myarry);$j++) {
//如果假设最小值比后面一个值还要小,就把还要小那一方的值和键保存起来
if($minvalue<$myarry[$j]) {
$minvalue = $myarry[$j];
$minindex = $j;
}
}
$temp = $myarry[$i]; //临时变量
$myarry[$i] = $myarry[$minindex]; //当前值等于更小的值 相当于更小的值往前移动一位 例: $myarry[3] = 7
$myarry[$minindex] = $temp; //相对较大的值后移一位 例: $myarry[4] = 10
}
}
// $arry = array(-1,4,2,34,81,73,92,92,-13,-33,0,283,98);
// selectSort($arry);
// var_dump($arry);
//插入排序快于选择排序
//原理:(小-大)跟前面一个进行比较
//变量使用地址符声明,确保每次都指向同一个内存地址
function insertSort(&$myarry)
{
//$i<count($myarry) 比较时候要全部进行比较 防止最后一个比前面的还小
for($i=0;$i<count($myarry);$i++) {
$insertval = $myarry[$i]; //准备要插入的数据
$insertindex = $i-1; //记录前面一个键
//$insertindex>=0 确保比较前面还有值,没有到最前面
//$insertval<$myarry[$insertindex 如果值比前面值还小 进行换位
while($insertindex>=0 && $insertval<$myarry[$insertindex]) {
$myarry[$insertindex+1] = $myarry[$insertindex]; //把值往后移
$insertindex--; //继续向前移动一位比较
}
$myarry[$insertindex+1] = $insertval; //插入,这里已经找到合适位置
}
}
// $arry = array(-1,4,2,34,81,73,92,92,-13,-33,0,283,98);
// insertSort($arry);
// var_dump($arry);
?>
冒泡算法,排序算法,插入算法
最新推荐文章于 2020-04-06 14:34:26 发布