PHP 实现四种基本排序算法

来源:互联网 发布:姚明球衣退役 知乎 编辑:程序博客网 时间:2024/06/07 06:14

PHP 实现四种基本排序算法 许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初级phper,虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具。

许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初级phper,虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具。这里介绍冒泡排序,插入排序,选择排序,快速排序四种基本算法,分析一下算法的思路。

前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。 
$arr(1,43,54,62,21,66,32,78,36,76,39); 

1. 冒泡排序

思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

代码实现:

  1. $arr=array(1,43,54,62,21,66,32,78,36,76,39);  
  2. function bubbleSort($arr)
  3. {  
  4.   $len=count($arr);
  5.   //该层循环控制 需要冒泡的轮数
  6.   for($i=1;$i<$len;$i++)
  7.   { //该层循环用来控制每轮 冒出一个数 需要比较的次数
  8.     for($k=0;$k<$len-$i;$k++)
  9.     {
  10.        if($arr[$k]>$arr[$k+1])
  11.         {
  12.             $tmp=$arr[$k+1];
  13.             $arr[$k+1]=$arr[$k];
  14.             $arr[$k]=$tmp;
  15.         }
  16.     }
  17.   }
  18.   return $arr;
  19. }

2. 选择排序 

思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

代码实现:

  1. function selectSort($arr) {
  2. //双重循环完成,外层控制轮数,内层控制比较次数
  3.  $len=count($arr);
  4.     for($i=0; $i<$len-1; $i++) {
  5.         //先假设最小的值的位置
  6.         $p = $i;
  7.         
  8.         for($j=$i+1; $j<$len; $j++) {
  9.             //$arr[$p] 是当前已知的最小值
  10.             if($arr[$p] > $arr[$j]) {
  11.             //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
  12.                 $p = $j;
  13.             }
  14.         }
  15.         //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
  16.         if($p != $i) {
  17.             $tmp = $arr[$p];
  18.             $arr[$p] = $arr[$i];
  19.             $arr[$i] = $tmp;
  20.         }
  21.     }
  22.     //返回最终结果
  23.     return $arr;
  24. } 

3.插入排序

思路分析:在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

代码实现:

  1. function insertSort($arr) {
  2.     $len=count($arr); 
  3.     for($i=1, $i<$len; $i++) {
  4.         $tmp = $arr[$i];
  5.         //内层循环控制,比较并插入
  6.         for($j=$i-1;$j>=0;$j--) {
  7.             if($tmp < $arr[$j]) {
  8.                 //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
  9.                 $arr[$j+1] = $arr[$j];
  10.                 $arr[$j] = $tmp;
  11.             } else {
  12.                 //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
  13.                 break;
  14.             }
  15.         }
  16.     }
  17.     return $arr;
  18. }

4.快速排序  

思路分析:选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

代码实现:

  1. function quickSort($arr) {
  2.     //先判断是否需要继续进行
  3.     $length = count($arr);
  4.     if($length <= 1) {
  5.         return $arr;
  6.     }
  7.     //选择第一个元素作为基准
  8.     $base_num = $arr[0];
  9.     //遍历除了标尺外的所有元素,按照大小关系放入两个数组内
  10.     //初始化两个数组
  11.     $left_array = array();  //小于基准的
  12.     $right_array = array();  //大于基准的
  13.     for($i=1; $i<$length; $i++) {
  14.         if($base_num > $arr[$i]) {
  15.             //放入左边数组
  16.             $left_array[] = $arr[$i];
  17.         } else {
  18.             //放入右边
  19.             $right_array[] = $arr[$i];
  20.         }
  21.     }
  22.     //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数
  23.     $left_array = quick_sort($left_array);
  24.     $right_array = quick_sort($right_array);
  25.     //合并
  26.     return array_merge($left_array, array($base_num), $right_array);
  27. }

互联网+时代,时刻要保持学习,携手千锋PHP,Dream It Possible。
 更多PHP相关技术请搜索千锋PHP,做真实的自己,用良心做教育。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新买的鸽子拉稀怎么办 信鸽羽毛上长了虫子怎么办 羊肉煮熟了太硬怎么办 切菜不小心切到手指怎么办 打荷盘子端错了怎么办 学厨师不会翻锅怎么办? 在饭店上班不给工资怎么办 炒菜的左手拿不起锅怎么办?? 厨师想尽快上手炒菜怎么办? 空调吹的肩膀痛怎么办 学厨师翻锅不会怎么办 肋软骨隆鼻太硬怎么办 百度云下载速度慢怎么办 买的种子没出怎么办 铃木小r烧整流器怎么办 厨师在厨房太热怎么办 被家长投诉体罚孩子怎么办 空腹彩超喝水了怎么办 鱼把厕.所堵了怎么办 螃蟹爬进厕所里怎么办 抄作业被老师发现怎么办 鱼把厕所堵了怎么办 刚憋尿上完厕所之后腹部很疼怎么办 小孩被老师投诉了家长怎么办 家长投诉被老师知道了怎么办 孩子上课不敢回答问题怎么办 孩子犯了错家长怎么办 错了不该错的题怎么办 不该错的题错了怎么办 小学生不爱写课堂作业怎么办 手被老师打肿了怎么办 老师反应孩子学习退步了怎么办 学护理的打屁股针怎么办 教师被投诉打学生怎么办 遇到内向的学生教师应该怎么办 教师遇到顽劣的学生怎么办 家长质疑老师的能力怎么办 和领导有冲突该怎么办 孩子叫也不听特别叛逆怎么办 孩子叛逆期不听妈妈的话怎么办 学生和老师反嘴怎么办?