<?php
$arr = [5,2,55,7,1,15,25];//定义数组
sort_buddle0($arr);//将数组排序
function sort_buddle0(&$arr){//传址排序
$len = count($arr);//计算数组长度
for($i=0;$i<$len;$i++){//从下标为0的元素开始,到下标为$len-1的元素结束,每次+1
for($j=$i+1;$j<$len;$j++){//从下标为1的元素开始,到下标为$len-1的元素结束,每次+1
if($arr[$j]<$arr[$i]){//如果二次遍历到的元素($arr[$j])比第一次遍历的元素($arr[$i])小,则将两个元素替换
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
}
function sort_buddle1(&$arr){//传址排序
$len = count($arr);//计算数组长度
for($i=0;$i<$len;$i++){//从下标为0的元素开始,到下标为$len-1的元素结束,每次+1
for($j=$len-1;$j>$i;$j--){//从下标为$len-1的元素开始,到下标为第一次遍历到的位置+1($i+1)结束,每次-1
if($arr[$j]<$arr[$j-1]){//如果两个相邻的元素中后面的比前面的小,则将两个元素替换
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
}
}
function sort_buddle2(&$arr){//传址排序
$len = count($arr);//计算数组长度
$flag = 1;//默认1,继续遍历
for($i=0;$i<$len&&$flag;$i++){//从下标为0的元素开始,到下标为$len-1的元素或者flag为0结束,每次+1
$flag = 0;//赋值为0,
for($j=$len-1;$j>$i;$j--){//从下标为$len-1的元素开始,到下标为第一次遍历到的位置+1($i+1)结束,每次-1
if($arr[$j]<$arr[$j-1]){//如果两个相邻的元素中后面的比前面的小,则将两个元素替换
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
$flag = 1;//如果第二次遍历中有元素替换,则将flag置为1,如果一次替换都没有,则说明该位置$i到最后的位置$len-1顺序是正确的
}
}
}
}