<?php
$arr=array(5,2,1,7,8,6,3,10,9);
showArray($arr);
/**
* 遍历打印数组
* @param string $type 排序方式
* @param array $arr 排序数组
*/
function showArray($arr,$type=‘原数组‘){
echo "$type:<br/>";
foreach ($arr as $v){
echo ‘ ‘.$v.‘ ‘;
}
echo ‘<br/>‘;
}
/**
* 冒泡排序
* 从小到大,大边界逐渐下降
* @param array $arr
*/
function bubbleSort($arr){
for($i=0;$i<count($arr)-1;$i++){
for ($j = 0; $j < count($arr)-1-$i; $j++) {
if($arr[$j]>$arr[$j+1]){
$temp=$arr[$j+1];
$arr[$j+1]=$arr[$j];
$arr[$j]=$temp;
}
}
}
return $arr;
}
// showArray(bubbleSort($arr),‘冒泡排序‘);
/**
* 选择排序
* 找出最小值,小边界逐渐向大收缩
* @param array $arr
*/
function selectSort($arr){
for ($i = 0; $i < count($arr); $i++) {
$minVal=$arr[$i];
$minIndex=$i;
for ($j = 0+1+$i; $j < count($arr); $j++) { //自己不用比 +1 小边界逐渐收缩 +$i
if ($minVal>$arr[$j]){ //找出最小值,为了比对最后一位
$minVal=$arr[$j];
$minIndex=$j;
}
}
$temp=$arr[$i];
$arr[$i]=$minVal;
$arr[$minIndex]=$temp;
}
return $arr;
}
// showArray(selectSort($arr),‘选择排序‘);
/**
* 插入排序
* 没有边界控制,利用minI向左偏移对比,达成就数组右移空位,插入
* @param array $arr
*/
function insertSort($arr){
for ($i = 1; $i < count($arr); $i++) { //从1开始,向-1位对比
$minV=$arr[$i];
$minI=$i-1;
while ($minI>=0 && $minV<$arr[$minI]) { //向左对比,达成就右移空出$minV位置
$arr[$minI+1]=$arr[$minI];
$minI--;
}
$arr[$minI+1]=$minV;
}
return $arr;
}
// showArray(insertSort($arr),‘插入排序‘);
/**
* 快速排序
* @param unknown $arr
* @return unknown|multitype:
*/
function quickSort($arr){
if(count($arr)<=1) return $arr;
$flag=$arr[0];
$left=array();
$right=array();
for ($i = 1; $i < count($arr); $i++) {
if($arr[$i]>$flag){
$left[]=$arr[$i];
}else {
$right[]=$arr[$i];
}
}//分完大小一次,再分
$left=quickSort($left);
$right=quickSort($right);
return array_merge($right,array($flag),$left);
}
// showArray(quickSort($arr),‘快速排序‘);
/**
* 二分法查找
* @param unknown $a
* @param unknown $val
* @return number
*/
function binarySearch($a, $val) {
$low = 0;
$high = count ( $a ) - 1;
while ( $low <= $high ) {
$mid = intval ( ($low + $high) / 2 );
if ($a [$mid] == $val)
return $mid;
if ($a [$mid] > $val) {
$high = $mid - 1;
} else {
$low = $mid + 1;
}
}
return - 1;
}
$a=quickSort($arr);
echo binarySearch($a, 7);
/**
*顺序查找
*/
function search(&$arr,$findVal){
$flag=false;
for($i=0;$i<count($arr);$i++){
if($findVal==$arr[$i]){
echo "找到了,下标为=$i";
$flag=true;
//break;
}
}
if(!$flag){
echo ‘查询不到‘;
}
}
search($arr,-1);
4种基本排序&2种查找