<?php
//冒泡排序,小>>大,核心思想:
//内层循环,相邻的数进行比较,较大的数被交换到靠后的位置,实现最大数在最后
//外层循环,每次循环减少一个参与循环的数,因为最大数已经在最后
function bubblesort(&$arr){
$tansf=0; //定义中间变量
for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
//如果前面的数大于后面的数,进行交换
$tansf =$arr[$j];
$arr[$j] =$arr[$j+1];
$arr[$j+1] =$tansf;
}
}
}
}
//选择排序,小>>大,核心思想:
//内层循环,找出剩下的数中最大数
//外层循环,最大数跟剩下数中最后一个交换,实现最大数在最末
function selectionsort(&$arr){
for($i=0;$i<count($arr)-1;$i++){
$max=$arr[0]; //假设arr[0]是最大数
$p=0; //定义一个指针,指向最大数的下标
for($j=1;$j<count($arr)-$i;$j++){
if($max<$arr[$j]){
//保持$max是最大数
$max=$arr[$j];
$p=$j;
}
}
//把比较数列中最后一个数和最大数进行交换
$arr[$p]=$arr[count($arr)-1-$i];
$arr[count($arr)-1-$i]=$max;
}
}
//插入排序,小>>大,核心思想:
//默认数组第一个数是有序数列,剩下的是无序数列
//内层循环,执行比较,插入数找到合适位置,插入数后面的有序数列位置后移1
//外层循环,无序数列的第一个数作为插入数,放在有序数列的合适位置
function insertionsort(&$arr){
for($i=1;$i<count($arr);$i++){
$insertval=$arr[$i]; //当前数为要插入的数
$p=$i-1; //要比较的数的位置比当前数靠前
while($p>=0 && $insertval<$arr[$p]){
//只要插入数小于被比较的数,被比较的数就后移一位,挪位给插入数
$arr[$p+1]=$arr[$p];
//指针指向前一位置
$p--;
}
//找到合适位置,插入
$arr[$p+1]=$insertval;
}
}
$arr=array(5,20,3,2,15,9,100,-3,99,23);
bubblesort($arr);
//selectionsort($arr);
//insertionsort($arr);
print_r($arr);
?>
没有评论:
发表评论