冒泡算法,排序算法,插入算法

<?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);

 

 

?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值