回炉重造,第十二话:php数组遍历排序

半条咸鱼,亦要仰望星空脚踏实地


下面来学习php种的数组相关的知识


数组:可以存储多个数据

创建数组:$arr[0]=123;

                  $arr[1]=456;

                  $arr[3]=789;

[0]--->这个为下标或者称为关键字

$arr[0]-->称为数组的一个元素

$arr[0]=123;123代表$arr[0]元素对应的值

$arr-->这是该数组的名称


php的数组中,元素存放的值可以是任意数据类型!


foreach更适用于数组的遍历,因为其不会局限于下标

例:$arr['name']="zhoupeng";

       $arr['love']="shuting";

       这中形式的下标用for循环无法遍历出,因为for循环下标适用数字

       用foreach遍历可以:

       foreach ($arr as $key=>$val){

                  echo $key."=".$val."<br/>";

       }

如果是适适用使用用for循环、while、do。。。while来遍历,则数组下标需要是数字

/php数组的相关函数
//1.count
$a = array(1,2,3,4,5);
$b = 123;
echo count($a)."<br>";
//2.is_array,判断是否是数组
echo is_array($b);
//3.print_r和var_dump,显示数组
print_r($a);
var_dump($a);
//4.explode,拆分字符串
$str = "1,2,3,4,5,3,6,0";
$arr = explode(",",$str);
var_dump($arr);//5.unset。,删除数字数组数

  


数组运算符
例子名称结果
$a + $b联合$a $b 的联合。
$a == $b相等如果 $a $b 具有相同的键/值对则为 TRUE
$a === $b全等如果 $a $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE
$a != $b不等如果 $a 不等于 $b 则为 TRUE
$a <> $b不等如果 $a 不等于 $b 则为 TRUE
$a !== $b不全等如果 $a 不全等于 $b 则为 TRUE


下面来学习以下数组的排序了:

内部排序

交换式排序法

1.冒泡排序

2.选择排序

3.插入排序

4.快速排序:速度非常快的一种排序方法


外部排序

因为数据量过大所以必须借助外部文件来完成


冒泡排序:

<?php
    $arr=array(0,7,5,3,18,-50);
    $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;
              }
         }//第二层循环就是将最大的数抛到最后,所以$j<count($arr)-1-$i,减去$i是去除之前抛后的
    }

若封装成函数就要注意,数组传递的是数值,对象传递的是地址,在函数中传地址可以在调用数组前加&


选择排序:
//选择排序法
    $arr = array(5,12,-3,0,28,-15);
    $temp = 0;
    for($i=0;$i<count($arr)-1;$i++){
         $minVal = $arr[$i];//假设$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;
        
    }
    print_r($arr);

    print_r($arr);


插入排序:

//插入排序
    $arr = array(0,-3,-5,-1,1,6,7,-9);
    //先默认下标为0的数为一个有序的数
    for($i=1;$i<count($arr);$i++){
     //$insertVal是准备插入的数
         $insertVal = $arr[$i];
         //准备先和前一位数比较
         $insertIndex = $i-1;
         //若条件满足,则我们还没有找到适当的位置
         while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){
          //同时把数后移
          $arr[$insertIndex+1]=$arr[$insertIndex];
          $insertIndex--;
         }
         //插入
         $arr[$insertIndex+1]=$insertVal;
    }
    print_r($arr);

速度上:冒泡<选择<插入<快速
快速排序的思想是选择中间数,然后比中间值小的在左边,大的在右边,然后分出来部分继续利用该思想分

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值