zoukankan      html  css  js  c++  java
  • PHP-----数组和常见排序算法

    数组的创建

     1 <?php
     2     //php创建数组
     3     //第一种方法
     4     $arr[0]=1;
     5     $arr[1]=23;
     6     $arr[2]=20;
     7     $arr[3]=43;
     8 
     9     for($i=0;$i<count($arr);$i++){
    10         echo '<br>'.$arr[$i];
    11     }
    12     //第二种方法
    13     $b=array(1,23,20,43);
    14 
    15     for($i=0;$i<count($b);$i++){
    16         echo '<br>'.$b[$i];
    17     }
    18 
    19     //第三种方法---自己指定下标----但是遍历数组的时候使用foreach循环
    20     $c['paxster']='pax';
    21     $c['boychik']='boy';
    22     foreach($c as $val){
    23         echo $val.'<br>';
    24     }
    25     foreach ($c as $key => $value) {
    26         echo $key.'='.$value.'<br>';
    27     }
    28 
    29     //js里的创建数组
    30     //var arr=new Array();
    31     //var a = new Array(5); 指定长度
    32     //var abb=[];
    33 ?>

    数组的遍历和一些细节。

    还可以通过数组运算符对多个数组进行操作,详细参看php手册。

     1 <?php
     2     //1.
     3     $arr=array(2=>'hello',22,33);
     4     //echo $arr[1];---->>报错
     5     //echo $arr[3];---->>22
     6     //echo $arr[5];---->>报错
     7 
     8     //2.重新赋值--------用后定义的值覆盖即可
     9     $abb=array(1=>4,32,23);
    10     $abb[1]=40;
    11     echo $abb[1];
    12 
    13     //3.布尔值作为下标
    14     $acc[true]='wuhan';
    15     $acc[false]='hubei';
    16     $acc[null]='china';
    17     $acc[12.3]='earth';
    18 
    19     echo $acc[1].'<br>';
    20     echo $acc[0].'<br>';
    21     echo $acc[null].'<br>';
    22     echo $acc[''].'<br>';
    23 
    24     echo $acc[12];
    25     echo $acc[12.3];
    26 
    27     //打印数组的详细信息
    28     print_r($acc);
    29     var_dump($acc);
    30 
    31     //4.动态改变数组
    32     $add=array(2,3);
    33     $add[4]=34;
    34     echo $add[4];//会把两者之间空余的元素忽略,后面添加的元素追加到前面的地址上
    35 
    36     //5.数组引用的陷阱---会把addme解析为常量,提示notice,所以把addme定义为一个字符串就不会出错
    37     const addme='QQ';
    38     $e[addme]='me';
    39     echo $e[addme];
    40 
    41     //6.is_array----是则返回1,不是则返回空
    42     $f=array(00,12);
    43     echo is_array($f);
    44 
    45     //拆分字符串explode
    46     $g='1 2 3 4 5';
    47     $h='1-2-3-4-5';
    48     $gg=explode(" ",$g);
    49     $hh=explode("-",$h);
    50     print_r($gg);
    51     print_r($hh);
    52 
    53     //使用4种方式遍历数组
    54     //for
    55     $dd=array(20,30,40,50,60);
    56 
    57     for($i=0;$i<count($dd);$i++){
    58         echo '<br/>'.$dd[$i];
    59     }
    60     //while
    61     $i=0;
    62     while($i<count($dd)){
    63         echo '<br/>'.$dd[$i];
    64         ++$i;
    65         //$i++;
    66     }
    67     //do..while
    68     $i=0;
    69     do{
    70         echo '<br/>'.$dd[$i];
    71         ++$i;
    72     }while($i<count($dd));
    73     //foreach
    74     foreach($dd as $key => $value){
    75         //echo $key=$value.'<br/>';
    76         echo "$key=$value<br/>";
    77     }
    78 ?>

    排序算法-----1.冒泡算法(去年学c的时候老师详细讲解了冒泡法,也是最简单的排序算法,计算效率相对较低)

     1 //bubble sort
     2     $arr=array(20,-20,0,5,-49);
     3     /*$temp=0;
     4     for($i=0;$i<count($arr)-1;$i++){
     5         for($j=0;$j<count($arr)-1-$i;$j++){
     6             if($arr[$j]>$arr[$j+1]){
     7                 $temp=$arr[$j];
     8                 $arr[$j]=$arr[$j+1];
     9                 $arr[$j+1]=$temp;
    10             }
    11         }
    12     }
    13     print_r($arr);*/
    14     //封装sort函数------形参加上地址符
    15     function bubbleSort(&$arr){
    16         $temp=0;
    17         for($i=0;$i<count($arr)-1;$i++){
    18             for($j=0;$j<count($arr)-1-$i;$j++){
    19                 if($arr[$j]>$arr[$j+1]){
    20                     $temp=$arr[$j];
    21                     $arr[$j]=$arr[$j+1];
    22                     $arr[$j+1]=$temp;
    23                 }
    24             }
    25         }
    26     }
    27     bubbleSort($arr);

    排序算法-----2.选择排序

     1 //selectSort选择排序法
     2     function selectSort(&$arr){
     3         
     4         for($i=0;$i<count($arr)-1;$i++){//减去自身
     5             $temp=0;//中间变量
     6             $min=$arr[$i];//假设最小值
     7             $minIndex=$i;//对应的下标值
     8             for($j=$i+1;$j<count($arr);$j++){//排好的不用再排
     9                 if($min>$arr[$j]){
    10                     $min=$arr[$j];
    11                     $minIndex=$j;
    12                 }
    13             }
    14             //交换值
    15             $temp=$arr[$i];
    16             $arr[$i]=$arr[$minIndex];
    17             $arr[$minIndex]=$temp;
    18         }
    19     }
    20     selectSort($arr);

    排序算法-----3.插入排序

     1 //insertSort插入排序
     2     function insertSort(&$arr){
     3         for($i=1;$i<count($arr);$i++){
     4             $insertValue=$arr[$i];
     5             $insertIndex=$i-1;
     6             while($insertIndex>=0&&$insertValue<$arr[$insertIndex]){
     7                 $arr[$insertIndex+1]=$arr[$insertIndex];
     8                 $insertIndex--;
     9             }
    10             $arr[$insertIndex+1]=$insertValue;
    11         }
    12     }
    13     insertSort($arr);
    14     print_r($arr);
    15     var_dump($arr);

    排序算法-----4.快速排序---各种语言的排序算法思想大同小异。php的快速排序算法算简单的,java更难一点。详情请点击

     1 function quickSort($arr) {
     2   if (count($arr) > 1) {
     3     $k = $arr[0];
     4     $x = array();
     5     $y = array();
     6     $_size = count($arr);     
     7     for ($i=1; $i<$_size; $i++) {
     8       if ($arr[$i] <= $k) {
     9         $x[] = $arr[$i];
    10       } else {
    11         $y[] = $arr[$i];
    12       }
    13     }
    14     $x = quickSort($x);
    15     $y = quickSort($y);
    16     return array_merge($x, array($k), $y);
    17   } else {
    18     return $arr;
    19   }
    20 }

     JS实现快速排序-----很好的一篇解释文章

     1 var quickSort = function(arr) {
     2   if (arr.length <= 1) { return arr; }
     3   var pivotIndex = Math.floor(arr.length / 2);
     4   var pivot = arr.splice(pivotIndex, 1)[0];//代表中位数
     5   var left = [];
     6   var right = [];
     7   for (var i = 0; i < arr.length; i++){
     8     if (arr[i] < pivot) {
     9       left.push(arr[i]);
    10     } else {
    11       right.push(arr[i]);
    12     }
    13   }
    14   return quickSort(left).concat([pivot], quickSort(right));
    15 };

    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。-----splice()详细

    slice()选取数组元素。返回一个新的数组,包含从 start 到 end (不包括end元素)的 arrayObject 中的元素。

    concat() 方法用于连接两个或多个数组。-----concat()详细

    念念不忘,必有回响。
  • 相关阅读:
    设置GridView、DataGrid 以提供thead、tbody等标签
    SqlCommandBuilder 可批量新增与修改数据
    js中的截流
    react代码分离方案
    redux在react中的使用
    react 生命周期
    react 函数bind(this)的三种方式
    react 三种组件定义方式
    linux系统下nginx安装目录和nginx.conf配置文件目录
    react component lifecycle
  • 原文地址:https://www.cnblogs.com/paxster/p/3548599.html
Copyright © 2011-2022 走看看