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