数组的排序

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;

}

 

 

?>

 

 

咱们这里说明一下类和对象的关系(细节后面逐步展开)

总结几句话:

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

    对象是具体,是类的一个具体实例

    类是对象的模板, 对象是类的一个个体实例

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息