• 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);
        ?>
  • 相关阅读:
    重塑矩阵
    买卖股票
    两个数组的交集
    洛谷 P3700
    HDU 6987
    Solution -「NOI 2021」「洛谷 P7740」机器人游戏
    「NOI 2021」酱油记
    Solution -「UNR #5」「UOJ #671」诡异操作
    CD from Codeforces Round #703 (Div. 2)
    CD from Codeforces Round #701 (Div. 2)
  • 原文地址:https://www.cnblogs.com/U-can/p/4465739.html
Copyright © 2020-2023  润新知