码迷,mamicode.com
首页 > 编程语言 > 详细

学习php常用算法

时间:2015-06-15 10:58:31      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

<?php 
/*学用php算法*/




/*1、冒泡法
    *思路分析:在要排序的一组数中,对当前还未排好的序列,
    *从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
    *即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
    *比如:
    *第一次循环:第一步(1:43)第二步(43:54)第三步(54:62)第四步(62:21)这时则死换变成了(21:62)........(76:39)
    *第二次循环:第一步(1:43)第二步(43:54)第三步(54:62)第四步(62:21)这时则死换变成了(21:62)........(36:76)
    
*/

$arr=array(1,43,54,62,21,66,32,78,36,76,39);   
function bubbleSort($arr)  
{   
    $len=count($arr);  
    //该层循环控制 需要冒泡的轮数  
    for($i=1;$i<$len;$i++)  
    { //该层循环用来控制每轮 冒出一个数 需要比较的次数  
        for($k=0;$k<$len-$i;$k++)  
        {  
            if($arr[$k]>$arr[$k+1])  
            {  
                $tmp=$arr[$k+1];  
                $arr[$k+1]=$arr[$k];  
                $arr[$k]=$tmp;  
            }  
        }  
    }  
    return $arr;  
} 



/*2.选择排序
    *思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。
    *然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
*/
function selectSort($arr) 
{
    //双重循环完成,外层控制轮数,内层控制比较次数(7.5.2.9.3)
    $len=count($arr);
    for($i=0; $i<$len-1; $i++) 
    {
        //先假设最小的值的位置
        $p = $i;

        for($j=$i+1; $j<$len; $j++) 
        {
            //$arr[$p] 是当前已知的最小值
            if($arr[$p] > $arr[$j]) 
            {
                //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
                $p = $j;
            }
        }
        //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
        if($p != $i) 
        {
            $tmp = $arr[$p];
            $arr[$p] = $arr[$i];
            $arr[$i] = $tmp;
        }
    }
    //返回最终结果
    return $arr;
}



 ?>

 

学习php常用算法

标签:

原文地址:http://www.cnblogs.com/hnbiao/p/4576414.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!