冒泡排序:
特點:
<?php
$arr1=array(5,15,3,4,9,11);
$len=count($arr1);
echo "
排序之前:";
print_r($arr1);
//需要循環n-1趟
for($i=0;$i<$len-1;++$i){//設定比較的趟數
//每一趟的比較都比前一趟少一次,第一趟需要比較n-1次
for($k=0;$k<$len-1-$i;++$k){//設置本趟比較的次數
//這裏要實現下標$k和下標$k+1這兩項的比較:
if($arr1[$k]>$arr1[$k+1]){
$temp=$arr1[$k+1];
$arr1[$k+1]=$arr1[$k];
$arr1[$k]=$temp;
}
}
}
echo "
排序之後:";
print_r($arr1);
選擇排序:
<?php
$arr1=array(5,15,3,4,9,11);
$len=count($arr1);
echo "
排序之前:";
print_r($arr1);
//要進行找出最大值的所在項的趟數
//需要循環n-1趟
for($i=0;$i<$len-1;++$i){
$max=$arr1[0];//取得第一項,並當作存儲最大值的變量
$maxPos=0;//取得第一項的下標
for($k=1;$k<$len-$i;++$k){
//這裏開始對從0到$len-$i的元素進行"找最大值及下標"
if($arr1[$k]>$max){
$max=$arr1[$k];
$maxPos=$k;
}
}
//開始做交換
$temp=$arr1[$maxPos];
$arr1[$maxPos]=$arr1[$len-1-$i];
$arr1[$len-1-$i]=$temp;
}
echo "
排序之後:";
print_r($arr1);
順序查找:
<?php
header('Content-Type:text/html;charset=utf8');
//順序查找
//需求:1.判斷要找的數在數組中是否存在;2.找出要找數在數組中的下標
class OrderSearch{
/**
* 判斷
*
* @param arr:數組
* @param n:需要查找的數
*
* @return bool
*/
public function isExist($arr,$n){
if(in_array($n, $arr)){
return true;
}
return false;
//可以使用三目
//in_array($n, $arr)==='true'?return true:return false;
}
/**
* 找出下標
*
* @param arr:數組
* @param n:需要查找的數
*
* @return bool
*/
public function getSub($arr,$n){
foreach ($arr as $key => $value) {
if($value==$n){
return $key;
}
}
}
}
$arr=array(5,15,3,4,9,11);
$n=4;
$os=new OrderSearch();
$bool=$os->isExist($arr,$n);
if($bool){
//$n在數組$arr中存在
echo "元素{$n}在數組arr中的下標爲:".$os->getSub($arr,$n);
}else{
//$n在數組$arr中不存在
echo "元素{$n}在數組arr中不存在";
}
二分查找:
<?php
header('Content-Type:text/html;charset=utf8');
//二分查找
//有2個前提:1.數組已經排好序;2.是連續的索引數組,即下標爲0,1,2,3,4,5...
class Search{
/**
*
* @param arr:已經排好序,而是連續的索引的數組
* @param n:查找的數
* @param statr:從start位開始查找
* @param end:查找到end位結束
*
* @return 1.查找數在數組中的位置 2.false
*/
public function twoPointsSearch($arr,$n,$start,$end){
//如果參數$start>$end,直接返回false
if($start>$end){
return false;
}
$mid=floor(($start+$end)/2);//返回$start和$end的中間值,如果有小數,捨去小數保留整數
if($arr[$mid]=$n){
return $mid;
}else if ($arr[$mid]>$n) {
//如果中間值大於需要查找的值
$end=$mid-1;
return self::twoPointsSearch($arr,$n,$start,$end);
}else{
//如果中間值小於需要查找的值
$start=$mid+1;
return self::twoPointsSearch($arr,$n,$start,$end);
}
}
}
$arr = array(3,4,5,15,19,21,25,28,30,30,33,38,44,51,52,55,60,77,80,82,83);
$n =33;
$len=count($arr);//count():計算數組長度
$search=new Search();
$result=$search->twoPointsSearch($arr,$n,0,$len-1);
if ($result===false) {
echo "沒有找到";
}else{
echo "{$n}在數組arr中的位置爲:".$result;
}