各种排序算法+折半查找

冒泡

public function action_bubble()
    {

    	$arr = array(10, 8, 5, 11, 9);
    	for($i=0; $i<count($arr)-1; $i++)
    	{
    		for($j=0; $j<count($arr)-1-$i; $j++)
    		{
    			if($arr[$j] > $arr[$j+1])
    			{
    				$swap = $arr[$j];
    				$arr[$j] = $arr[$j+1];
    				$arr[$j+1] = $swap;
    			}

    		}
    	}

    	print_r($arr); exit;
    }

选择

public function action_select()
    {
    	$arr = array(10, 8, 5, 11, 9);
    	for($i=0; $i<count($arr)-1 ; $i++)
    	{
    		$min = $i;
    		for($j=$i+1; $j<count($arr); $j++)
    		{
    			if($arr[$j] < $arr[$min])
    				$min = $j;
    		}

    		if($min != $i)
    		{
    			$swap = $arr[$min];
    			$arr[$min] = $arr[$i];
    			$arr[$i] = $swap;
    		}
    	}
    	print_r($arr); exit;
    }
插入

 public function action_insert()
    {
    	$arr = array(10, 8, 5, 11, 9);
    	foreach($arr as $k=>$v)
    	{
    		$i = $k-1;
    		while($i > -1 && $arr[$i] < $v)
    		{
    			$swap = $arr[$i+1];
    			$arr[$i+1] = $arr[$i];
    			$arr[$i] = $swap;
    			$i--;
    		}
    	}
    	print_r($arr); exit;
    }
快速

public function action_quick()
	{
		$arr=array(10, 8, 5, 11, 9);
		$new_arr = $this->quick2($arr);
		print_r($new_arr); exit;
	}


    public function quick2($arr)
    {
    	$len = count($arr);
    	if($len <= 1)
    		return $arr;
    	$x = array();
    	$y = array();
    	$k = $arr[0];
    	for($i=1; $i<$len; $i++)
    	{
    		if($arr[$i] <= $k)
    		{
    			$x[] = $arr[$i];
    		}else{
    			$y[] = $arr[$i];
    		}
    	}
    	$x = $this->quick2($x);
    	$y = $this->quick2($y);
    	$res = array_merge($x, array($k), $y);
    	return $res;
    }

折半查找

public function action_find()
    {
    	$arr=array(5, 9, 10, 11, 26);
		$pos = $this->find_me($arr, 10);
		echo $arr[$pos]; exit;
    }

    public function find_me($arr, $x)
    {
    	$l = 0;
    	$r = count($arr);
    	while($l <= $r)
    	{
    		$mid = floor(($l+$r)/2);
    		if($x > $arr[$mid])
    			$l = $mid+1;
    		elseif($x < $arr[$mid])
    			$r = $mid-1;
    		else
    			return $mid;


    	}
    }





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值