$arr = [23,43,1,2,41,567,32,11];
//冒泡排序
//思路:比较数组相邻的两个元素,把小的放在前面,以此类推遍历完所有元素
function bubble_sort($arr)
{
$count = count($arr);
if($count<1) return $arr;
for($i=0;$i<$count;$i++){
for($j=$i+1;$j<$count;$j++){
if($arr[$i]>$arr[$j]){
$temporary = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temporary;
}
}
}
return $arr;
}
//快速排序
//思路 以数组第一个元素为基准,比他大的放左边,比他小的放右边,最后合并
function quick_sort($arr)
{
$count = count($arr);
if($count<=1) return $arr;
$left_arr = [];
$right_arr = [];
$first = $arr[0];
for($i=1;$i<$count;$i++){
if($arr[$i]>$first){
$right_arr[] = $arr[$i];
}else{
$left_arr[] = $arr[$i];
}
}
return array_merge(quick_sort($left_arr),[$first],quick_sort($right_arr));
}
//插入排序
//思路:将要排序的元素插入到已经嘉定排序好的数组的指定位置
function insert_sort($arr)
{
$count = count($arr);
if($count<=1) return $arr;
for($i=1;$i<$count;$i++){
//获取当前需要比较的元素
$temp = $arr[$i];
for($j=$i-1;$j>=0;$j--){
//$arr[i] 需要插入的元素,$arr[j] 需要比较的元素
if($arr[$j]>$temp){
//如果插入的元素比较小,交换位置
$arr[$j+1] =$arr[$j];
$arr[$j] = $temp;
}else{
//如果不需要比较了,直接跳过
break;
}
}
}
return $arr;
}
//选择排序
function select_sort($arr){
$len = count($arr);
for($i=0;$i<$len;$i++){
$tmp = $i;//假设$i为最小值,并作为已排序序列的最后一个元素
for($j=$i;$j<$len;$j++){
if($arr[$j]<$arr[$tmp]){
$tmp = $j;//记录最小值得下标
}
}
if($tmp!=$i){//根据下标是否改变,如果改变则调换位置。
list($arr[$tmp],$arr[$i])=[$arr[$i],$arr[$tmp]];
}
}
return $arr;
}
print_r(select_sort($arr));