1、冒泡排序:
<?php
$arr=[18,22,12,15,23,9];
//计算长度,也就是值的数量
$n = count($arr);
//控制每次趟数 (列数)
for($i=0;$i<$n-1;$i++){
//控制每趟里面替换次数 (行数)
for($k=0;$k<$n-1-$i;$k++){
//前面的值大于后面的值,也就是从小到大排序
if($arr[$k]>$arr[$k+1]){
//1、用第三个变量做中转
// $temp = $arr[$k];
// $arr[$k] = $arr[$k+1];
// $arr[$k+1] = $temp;
// 2、用list函数
list($arr[$k],$arr[$k+1]) = array($arr[$k+1],$arr[$k]);
}
}
}
var_dump($arr);
2.1选择排序(以最小值进行替换)
//选择排序 每次循环轮数都确定一个最小值,最小的值跟最前面的数字进行替换,
$arr=[18,22,12,15,23,9];
$len = count($arr);
//大循环,控制轮数
for ($i=0;$i<$len-1;$i++) {
//将最小的键赋值
$p = $i;
//小循环 比较里面的最小值
for ($j = $i + 1; $j < $len; $j++) {
//判断最小值,记录键赋值
if ($arr[$j] < $arr[$p]) {
$p = $j;
}
}
//进行替换
if ($p != $i) {
list($arr[$p],$arr[$i]) = array($arr[$i],$arr[$p]);
}
}
echo '<pre>';
print_r($arr);
2.2选择排序(以最大值进行替换)
//每次循环轮数都确定一个最大值,最大值跟最后一个数字进行替换
$arr=[18,22,12,15,23,9];
$n = count($arr);
//大循环 控制轮数
for ($i=0;$i<$n-1;$i++){
//假设以第一个数为最大的数
$max = $arr[0];
$max_key = 0;
//小循环 控制比较次数
for ($j=0;$j<$n-$i;$j++){
// 如果后面的数比第一个大,就记录键值
if($arr[$j]>$max){
$max = $arr[$j];
$max_key = $j;
}
}
// 替换值 最大的值,跟最后一个替换 $n-1-$i 是每轮之后最后一个键
if($max_key != $n-1-$i){
list($arr[$n-1-$i],$arr[$max_key]) = array($arr[$max_key],$arr[$n-1-$i],);
}
}
echo '<pre>';
print_r($arr);