题目:
用php实现排序算法 (冒泡 、选择、快速排序任选一种你熟悉的就可以) 自己可以随便定义一个数组,然后进行排序,升序排序
注意:
1. 先把思路梳理清楚 最好把思路写下来,可以参考别人代码但一定要理解代码里的意思
冒泡排序法
- 原理图:
-
思路
对数组进行遍历,每次遍历的数组元素,都和数组中的后续元素进行比较,判断大小
降序
<?php
//降序
$num=[12,3,5,23,6,87,3245,96,13,10];
echo count($num);
$arrlength=count($num); //获取数组长度
for($i=0;$i<$arrlength;$i++){//从大到小排序
$max=$num[$i]; //每次将这个数设置为最大值
echo $max,'<br>';
for($j=$i+1;$j<=$arrlength;$j++){ //在数组后寻找比最大值更大的数
if ($num[$j]>$max){ //判断是否比max更大,如果更大,就比较的两个数交换
$max=$num[$j]; //比max大 将找到的数给max
$num[$j]=$num[$i];
$num[$i]=$max;
}
}
}
echo '<br>使用冒泡排序法对数组进行排序<hr/>';
echo '<pre>';
var_dump($num);
echo '</pre>';
?>
升序
<?php
$num1=[12,3,5,23,6,87,3245,96,13,10];
echo count($num1);
$arrlength=count($num1); //获取数组长度
for($i=0;$i<$arrlength;$i++){//从小到大排序
$min=$num1[$i]; //每次将这个数设置为最小值
for($j=$i+1;$j<$arrlength;$j++){ //在数组后寻找比最小值更小的数
echo $j;
if ($num1[$j]<$min){ //判断是否比min更小,两个数交换
$min=$num1[$j]; //比min小 将找到的数给min
$num1[$j]=$num1[$i];
$num1[$i]=$min;
}
}
}
echo '<br>使用冒泡排序法对数组进行排序<hr/>';
echo '<pre>';
var_dump($num1);
echo '</pre>';
?>
简单选择排序
思路: 对于一个数组进行循环,数组中有几个元素,就进行几次比较
例如: 对于一个数组【1,3,5,9,33,4】
第一次:使用1,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换
第二次,使用3,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换
第三次,使用5,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换
第四次,使用9,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换
第五次,使用33,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换
这里只是举例子,后续进行具体操作
代码实现
<?php
$arr=array(9,1,2,10,4,12,3);
print_r($arr);
$arrlength=count($arr);
for($i=0;$i<$arrlength-1;$i++){
$min=$arr[$i]; //也可以直接$min_index=$i
for($j=$i+1;$j<$arrlength;$j++){
if($arr[$j]<$min){ //寻找后续数组中最小的一个数,
//$min_index=$i 的比较方式为 $arr[$j]<$arr[$min_index]
$min=$arr[$j]; //将最小的数赋值给$min,,,
// 其中 其实也可以使用索引的方式
//直接可以一句话:$min_index=$j
$min_num=$j; //获取最小数的索引
}
}
//echo '<br>';
if($min != $arr[$i]){ //判断这个最小数,和之前的数还相等嘛,不相等就是后面有更小的数
$t=$arr[$i];
$arr[$i]=$arr[$min_num]; //和找到的最小的数交换位置
$arr[$min_num]=$t;
}
}
echo '<pre>';
print_r($arr); //输出显示结果
echo '</pre>';
?>