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()详细

    念念不忘,必有回响。
  • 相关阅读:
    Good Bye 2014 B. New Year Permutation(floyd )
    hdu 5147 Sequence II (树状数组 求逆序数)
    POJ 1696 Space Ant (极角排序)
    POJ 2398 Toy Storage (叉积判断点和线段的关系)
    hdu 2897 邂逅明下 (简单巴什博弈)
    poj 1410 Intersection (判断线段与矩形相交 判线段相交)
    HDU 3400 Line belt (三分嵌套)
    Codeforces Round #279 (Div. 2) C. Hacking Cypher (大数取余)
    Codeforces Round #179 (Div. 2) B. Yaroslav and Two Strings (容斥原理)
    hdu 1576 A/B (求逆元)
  • 原文地址:https://www.cnblogs.com/paxster/p/3548599.html
Copyright © 2011-2022 走看看