php练习二

数组常用的排序法有:冒泡排序法、选择排序法、插入排序法、(快速排序法)。

1、冒泡排序法(交换式排序法):其基本思想是通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部,就像水底下的汽泡一样逐渐向上冒。

举例说明:

<?php 
        $arr=array(0,-1,3,-5,2,10,5);
        //按升序排序即从小到大排序
        $count=count($arr);
        $temp=0;
        for($i=0;$i<$count-1;$i++){
            for($j=0;$j<$count-1-$i;$j++){
                //如果前面的数比后面的大,则进行交换
                if($arr[$j]>$arr[$j+1]){
                    $temp=$arr[$j];
                    $arr[$j]=$arr[$j+1];
                    $arr[$j+1]=$temp;
                }
            }            
        }        
        print_r ($arr);
    ?>

打印输出:Array ( [0] => -5 [1] => -1 [2] => 0 [3] => 2 [4] => 3 [5] => 5 [6] => 10 )

若将上面的排序封装成一个函数,则代码如下:

<?php 
function bubbleSort(&$arr){
      $count=count($arr);
      $temp=0;
      for($i=0;$i<$count-1;$i++){
             for($j=0;$j<$count-1-$i;$j++){
          //如果前面的数比后面的大,则进行交换
           if($arr[$j]>$arr[$j+1]){
               $temp=$arr[$j];
                $arr[$j]=$arr[$j+1];
                $arr[$j+1]=$temp;
            }
          }            
      }        
        
}
$arr=array(0,-1,3,-5,2,10,5);
 bubbleSort($arr);
print_r($arr);
        
?>

注意:需要在函数中的参数前面添加“&”符,参数以引用(地址)传递,这样才能改变$arr的值,否则最后打印输出的还是原来的数组(即未经过排序)。

2、选择排序法

选择排序属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,经过和其他元素重整,再依原则交换位置后达到排序的目的。

举例说明:

<?php
/*选择排序*/
        function selectSort(&$arr){
            $temp=0;
            for($i=0;$i<count($arr)-1;$i++){
                $minVal=$arr[$i];
                $minIndex=$i;
                for($j=$i+1;$j<count($arr);$j++){                    
                    if($minVal>$arr[$j]){
                        $minVal=$arr[$j];
                        $minIndex=$j;    
                    }                    
                }                
                $temp=$arr[$i];    
                           
                $arr[$i]=$arr[$minIndex];
                        
                $arr[$minIndex]=$temp;                
                
            }
        }
        $arr=array(2,0,-1,1);
        selectSort($arr);
        print_r ($arr);
    ?>

 3、插入排序法

其基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把他的排序码依次与有序表元素的排序码进行对比,将它插入到有序表中的适当位置,使之成为新的有序表。

举例说明:

<?php
//插入排序(升序)
        function insertSort(&$arr){
            //先默认下标为0,这个数已经是有序的
            for($i=1;$i<count($arr);$i++){
                //$insertVal是准备插入的数
                $insertVal=$arr[$i];
                //准备先与$insertIndex进行比较
                $insertIndex=$i-1;
                //如果满足这个条件,说明还没有找到适当的位置
                while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){
                    $insertIndex--;
                }
                //插入(这时就给$insertVal找到适当的位置)
                $arr[$insertIndex+1]=$insertVal;
                
            }
        }
        $arr=array(2,0,-1,1);
        insertSort($arr);
        print_r ($arr);
    ?>

 

posted @ 2015-07-12 23:28  U_can  阅读(221)  评论(0编辑  收藏  举报