1 PHP冒泡排序、快速排序、二分法

<?php
//快速排序(数组排序)
function quick_sort($array) {
	if (count($array) <= 1) 
	return $array;
	$key = $array[0];   //把数组的第一个元素作为关键数据$left_arr = array();
	$right_arr = array();
	for ($i=1; $i<count($array); $i++){
	   if ($array[$i] <= $key) {  
		$left_arr[]	= $array[$i];   
	   }else{   
		$right_arr[] = $array[$i];
	   }
	}
	$left_arr   = quick_sort($left_arr);
	$right_arr  = quick_sort($right_arr);
	return array_merge($left_arr, array($key), $right_arr);
}
$arr = array(49, 38, 65, 97, 76, 13, 27);
$aResule = quick_sort($arr);
print_r($aResule);
 
//冒泡排序(一维数组)---------------------------------------------------------------------
function bubble_sort($array)
{
$count = count($array);
if ($count <= 0) return false;
for($i=0; $i<$count; $i++)
{
   for($j=$count-1; $j>$i; $j--)
   {
    //如果后一个元素小于前一个,则调换位置
    if ($array[$j] < $array[$j-1])
    {
     $tmp 			= $array[$j];
     $array[$j] 	= $array[$j-1];
     $array[$j-1] 	= $tmp;
    }
   }
}
return $array;
}
//使用实例
$arr = array(49, 38, 65, 97, 76, 13, 27);
$arr = bubble_sort($arr);
print_r($arr);
?>

二分法逻辑可以参考 二分法-维基百科,这段代码摘自百度文库.
二分法取IP地址算法,这里的这个算法看了不太懂

<?php 
//二分法 ---------------------------------------------------------------------
function Dichotomy ($php,$k,$low=0,$max=0)
{
	//echo $low.'--'.$max.'test times <br />';
	if(count($php)!=0&&$max==0)
	{
		$max	=	count($php);
	}	
	if($low<=$max)
	{
		$mid	=	intval(($low+$max)/2);
		if($php[$mid]==$k)
		{
			return $mid;
		}
		elseif($php[$mid]>$k)
		{
			return Dichotomy($php,$k,$low,$mid-1);
		}
		else 
		{
			return Dichotomy($php,$k,$mid+1,$max); 
		}
	}
	return -1;
}
$php	=	array(1,2,3,4,5,6);
echo Dichotomy($php,5);
?>

Related posts:

1 thought on “1 PHP冒泡排序、快速排序、二分法”

Leave a Reply

Your email address will not be published.