數組的排序

u      數組的排序php

 

這裏咱們介紹一些經常使用的排序方法, 排序是一個程序員基本功, 所謂排序就是對一組數據,按照某個順序排列的過程。html

 

排序分兩大類:程序員

l      內部排序編程

(1) 交換式排序法數組

    冒泡法函數

基本思想:post

案例說明:ui

 

<?php
 
       //簡單的
 
       $arr=array(0,5,-1);
       //這是一箇中間變量
       $temp=0;
       //咱們要把數組,從小到大
       
       //外層循環
       for($i=0;$i<count($arr)-1;$i++){
       
              for($j=0;$j<count($arr)-1-$i;$j++){
                     
                     //說明前面的數比後面的數大,就要交換
                     
                     if($arr[$j]>$arr[$j+1]){
                            
                            $temp=$arr[$j];
                            $arr[$j]=$arr[$j+1];
                            $arr[$j+1]=$temp;
                            
                     }
              }
              
       }
 
       //輸出
       print_r($arr);
 
 
?>

 

 

爲了更好使用排序,咱們將其封裝成一個函數:代碼以下 spa

<?phpcode

 

 

       //簡單的

       //如今咱們把冒泡法封裝成函數,利用之後使用

       function bubbleSort(&$myarr){    

              //這是一箇中間變量

              $temp=0;

              //咱們要把數組,從小到大             

              //外層循環

              for($i=0;$i<count($myarr)-1;$i++){

             

                     for($j=0;$j<count($myarr)-1-$i;$j++){

                           

                            //說明前面的數比後面的數大,就要交換

                           

                            if($myarr[$j]>$myarr[$j+1]){

                                  

                                   $temp=$myarr[$j];

                                   $myarr[$j]=$myarr[$j+1];

                                   $myarr[$j+1]=$temp;

                                  

                            }

              }

              }

 

              echo "<br/>函數中的myarr數組";

              print_r($myarr);

       }

 

 

       $arr=array(0,5,-1);

      

 

       //使用函數去排序

       bubbleSort($arr);

      

       //輸出

       print_r($arr);

 

 

?>

 

從上面的案例咱們能夠看出

* 數組默認傳遞的是值,不是地址

    快速排序法

 

快速排序法,咱們就介紹了一個思想:

    選擇排序法

 

選擇排序法的案例:

 

 

舉例說明:

 

function selectSort(&$arr){

      

              $temp=0;

 

              for($i=0;$i<count($arr)-1;$i++){

                    

                     //假設 $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;

 

              }

 

       }

本身分析流程.

 

    插入排序法

 

排序思想:

 

//插入排序法(->)

       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]){

                           

                            //同時把數後移

                            $arr[$insertIndex+1]=$arr[$insertIndex];

 

                            $insertIndex--;

                           

 

                     }

                     //插入(這時就給$insertVal找到適當位置)

                    

                     $arr[$insertIndex+1]=$insertVal;      

              }

             

       }

從效率上看.

 

冒泡法< 選擇排序法 < 插入排序法

 

快速排序法.[空間和時間]

 

 

l      外邊排序

 

由於數據量大,必須藉助外邊文件來完成.

 

 

 

u      查找

 

 

咱們這裏給你們介紹 兩種

    順序查找

對某個數組,安裝順序,一個一個比較,而後找到你要的數據.

案例:

 

要求從一個數組 $arr=array(46,90,900,0,-1)中查找一個 34,若是查找則輸出該數的下標,若是找不到,則輸出,查無此數

 

代碼:

 

//要求從一個數組 $arr=array(46,90,900,0,-1)中查找一個 34,若是查找則輸出該數//的下標,若是找不到,則輸出,查無此數

 

       $arr=array(46,90,900,0,-1,-1);

 

 

       function search(&$arr,$findVal){

             

              $flag=false;

              for($i=0;$i<count($arr);$i++){

                    

                     if($findVal==$arr[$i]){

                            echo "找到了,下標爲=$i";

                            $flag=true;

                            //break;

                     }

              }

              if(!$flag){

                     echo '查詢不到';

              }

 

       }

 

       search($arr,-1);

    二分查找法(必須掌握)

 

所謂二分查找,它有一個重要的前提, 該數組自己已是一個有序數組.

若是該數組不是有序的,則必須先排序再查找

 

代碼伺候:

//二分查找函數

       function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){

             

 

              // $rightIndex>$leftIndex 說明沒有數

 

              if($rightIndex<$leftIndex){

                     echo "找不到該數";

                     return ;

              }

 

              //找到中間這個數

              $middleIndex=round(($rightIndex+$leftIndex)/2);

 

              //若是大於則,向後面找

              if($findVal>$arr[$middleIndex]){

                    

                     binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);

              }

              //若是是小於中間這個數,則向前面找

              else if($findVal<$arr[$middleIndex]){

                     binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);

              }else{

                     echo "找到這個數 下標是 $middleIndex";

              }

 

 

 

       }

 

u      多維數組-二維數組

二維數組的基本語法:

$arr=array( array(1,2,3), array(5,6,9) );

$arr[0]=array(1,0);

二維數組,地圖 ...

 二維數組在內存中存在的形式:

快速入門案例:

 

請用二維數組,輸出以下圖形

 

0 0 0 0 0 0

    0 0 1 0 0 0  

    0 2 0 3 0 0

    0 0 0 0 0 0 

 

//定義一個二維數組

 

       $arr=array(

       array(0,0,0,0,0,0,1),

       array(0, 0, 1, 0 ,0 ,0,5),

       array(0 ,2 ,0, 3, 0, 0,90),

       array(0,0,0,0,0,0,100));

 

       //遍歷二維數組()

       for($i=0;$i<count($arr);$i++){

             

              //遍歷每行的數據

              for($j=0;$j<count($arr[$i]);$j++){

                     echo $arr[$i][$j]."&nbsp;";

              }

              echo "<br/>";

       }

 

       echo "<br/>".$arr[2][3];

 

 

1.  打印以下圖型:

 

*********

*********

*********

*********

*********

*********

 

 

2.  打印以下圖型:

 

*

**

***

****

*****

 

3.  打印以下圖型:

 

2.       空心金字塔

3.       空心菱形

 

 

定義一個函數

function printTest($n,$name){

 

      

}

 

view.php

 

<html>

<head>

<meta http-equiv="content-type" content="text/html;charset=utf-8"/>

</head>

 

<form action="homework01.php" method="post">

請輸入層數:<input type="text" name="layer"/><br/>

請選擇形狀:

<select name="shape">

<option value="a">矩形</option>

<option value="b">半金字塔</option>

<option value="c">金字塔</option>

<option value="d">金字塔</option>

<option value="e">金字塔</option>

</select><br/>

<input type="submit" value="打印"/>

</form>

 

</html>

 

homework01.php

 

<?php

 

 

       //死去活來

    //$n表示層數

       $n=$_REQUEST['layer'];

       //"a"->表示矩形 "b"=>一半金子塔 "c"=>完整的金字塔

       $shape=$_REQUEST['shape'];

      

       $starNum=5;

 

 

       //swtich

       function printShape($n,$shape,$starNum=5){

             

              switch($shape){

                    

                     case "a":

                            for($i=1;$i<=$n;$i++){

                                   for($j=1;$j<=$starNum;$j++){

                                          echo "*";

                                   }

                                   //打完一層後,換行

                                   echo "<br/>";

                            }

                            break;

                     case "b":

                            for($i=1;$i<=$n;$i++){

                                  

                                   for($j=1;$j<=$i;$j++){

                                          echo "*";

                                   }

                                   echo "<br/>";

                            }

                            break;

                     case "c":

                            break;

              }

       }

 

       //調用

 

       printShape($n,$shape);

?>

 

 

 

1.      已知手掌遊戲機一臺320元,mp3一臺260元。

公司舉行抽獎大會,公司有18人,一等獎遊戲機,二等獎mp3

購入5臺遊戲機,13mp3

問總價爲多少,公司實際平均給每人花費了多少錢。(4980276.6666

 

<?php

       

$gamerPrice=320;

 $mp3Price=260;

 

 $gamerNum=5;

 $mp3Num=13;

 

 $totalPrice=$gamerPrice*$gamerNum+ $mp3Price* $mp3Num;

 

 $avgPrice= $totalPrice/ 18;

 

?>

 

 

1.      跳水比賽,8個評委打分。運動員的成績是8個成績取掉一個最高分,去掉一個最低分,剩下的6個分數的平均分就是最後得分。使用一維數組實現打分功能。

解題:

<?php

       $arr=array(90,23,89,100,2,5,89,44);

 

       //這裏有一個思路,若是隻想知道最低分和最高分是多少,則能夠排序.

 

       //找出給出最低分的裁判

 

       //該函數能夠返回給出最低分的裁判的下標

       function findMin($arr){

 

              //假設第一我的就是給出最低分的裁判

              $minFen=$arr[0];

              $minIndex=0;

              for($i=1;$i<count($arr);$i++){

       //若是下面條件成立,說明$i 裁判給出的成績更低

if($minFen>$arr[$i]){

      $minFe=$arr[$i];

      $minIndex=$i;

}

}

return    $minIndex;

}

 

?>

 

 

 

 

u      php面向對象編程

 

 

提出一個問題?

 

張老太養了兩隻貓貓:一隻名字叫小白,今年3,白色。還有一隻叫小花,今年100,花色。請編寫一個程序,當用戶輸入小貓的名字時,就顯示該貓的名字,年齡,顏色。若是用戶輸入的小貓名錯誤,則顯示 張老太沒有這隻貓貓。

 

首先咱們用現有的知識來完成這個案例:

<?php

 

       $cat1_name=」小白」;

       $cat1_age=3;

       $cat1_color=」白色」;

 

       $cat2_name=」小花」;

       $cat2_age=100;

       $cat2_color=」花色」;

 

 

?>

 

咱們能不能把屬於同一事物的 變量,統一管理?

 

解決之道->對象

 

快速體驗案例:

<?php

 

 

class Cat{

 

       public $name;

    public $age;

    public $color;

 

}

 

//建立一隻貓

 $cat1=new Cat();

 $cat1->name="小白";

 $cat1->age=3;

 $cat1->color="白色";

 $cat2=new Cat();

 $cat2->name="小花";

 $cat2->age=100;

 $cat2->color="顏色";

 

//若是咱們找到一隻貓,只要找到 $cat1, 那麼該變量全部相關的屬性都統統的找到

$findCatName="小花";

if($cat2->name==$findCatName){

       echo $cat2->name."||".$cat2->age."||".$cat2->color;

}

 

 

?>

 

 

咱們這裏說明一下類和對象的關係(細節後面逐步展開)

總結幾句話:

    類是抽象的,表明一類事物

    對象是具體,是類的一個具體實例

    類是對象的模板, 對象是類的一個個體實例

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息