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


__EOF__

本文作者Paxster
本文链接https://www.cnblogs.com/paxster/p/3548599.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Paxster  阅读(901)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示