资讯专栏INFORMATION COLUMN

php实现排序(选择,冒泡,快速)

biaoxiaoduan / 1228人阅读

摘要:它的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

选择排序

选择排序主要是将假设数组中的第一个是最小的,循环与数组中的第一个进行比较 如果比其还小 则记录下标 进行数值交换 效率相对冒泡来说比较高

</>复制代码

  1. function selection_sort($array){
  2. $count=count($array);
  3. for($i=0;$i<$count-1;$i++){
  4. /*findtheminest*/
  5. $min=$i;
  6. echo"$min-->".$array[$min]."-->";
  7. for($j=$i+1;$j<$count;$j++){
  8. //由小到大排列
  9. if($array[$min]>$array[$j]){
  10. //表明当前最小的还比当前的元素大
  11. $min=$j;
  12. //赋值新的最小的
  13. }
  14. }
  15. echo$array[$min]."coco
    ";
  16. /*swap$array[$i]and$array[$min]即将当前内循环的最小元素放在$i位置上*/
  17. if($min!=$i){
  18. $temp=$array[$min];
  19. $array[$min]=$array[$i];
  20. $array[$i]=$temp;
  21. }
  22. }
  23. return$array;
  24. }
冒泡排序:

冒泡排序是将数组中的前后两个相领的数值进行比较 条件成立 则进行交换 效率比较低 因为其交换的次数也比较多

</>复制代码

  1. function bubbleSort($numbers) {
  2. $cnt = count($numbers);
  3. for ($i = 0; $i < $cnt; $i++) {
  4. for ($j = 0; $j < $cnt - $i - 1; $j++) {
  5. if ($numbers[$j] > $numbers[$j + 1]) {
  6. $temp = $numbers[$j];
  7. $numbers[$j] = $numbers[$j + 1];
  8. $numbers[$j + 1] = $temp;
  9. }
  10. }
  11. }
  12. return $numbers;

}

插入排序:

插入排序是将插入的数据保存在变量中,与数组中的每个数比较 找到合适的位置 进行插入 效率相对来说比较高

</>复制代码

  1. function insertSort($arr)
  2. {
  3. for($i=0;$i=0&&$insertVal<$arr[$insertIndex])
  4. {
  5. $arr[$insertIndex+1]=$arr[$insertIndex];
  6. $insertIndex--;
  7. }
  8. $arr[$insertIndex+1]=$insertVal;
  9. }
  10. }
快速插入:

</>复制代码

  1. 快速排序由C. A. R.
    Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。效率很高

</>复制代码

  1. function quick_sort($arr)
  2. {
  3. //判断参数是否是一个数组
  4. if(!is_array($arr))
  5. return false;
  6. //递归出口:数组长度为1,直接返回数组
  7. $length=count($arr);
  8. if($length<=1) return $arr;
  9. //数组元素有多个,则定义两个空数组
  10. $left=$right=array();
  11. //使用for循环进行遍历,把第一个元素当做比较的对象
  12. for($i=1;$i<$length;$i++)
  13. {
  14. //判断当前元素的大小
  15. if($arr[$i]<$arr[0]){
  16. $left[]=$arr[$i];
  17. }else{
  18. $right[]=$arr[$i];
  19. }
  20. }
  21. //递归调用
  22. $left=quick_sort($left);
  23. $right=quick_sort($right);
  24. //将所有的结果合并
  25. return array_merge($left,array($arr[0]),$right);
  26. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22466.html

相关文章

  • PHP面试:尽可能多的说出你知道的排序算法

    摘要:良好的排序算法具有进行最少的比较和交换的特征。冒泡排序是一个基于比较的排序算法,被认为是效率最低的排序算法之一。现在让我们使用实现冒泡排序算法。插入排序到目前为止,我们已经看到了两种基于比较的排序算法。 预警 本文适合对于排序算法不太了解的新手同学观看,大佬直接忽略即可。因为考虑到连贯性,所以篇幅较长。老铁们看完需要大概一个小时,但是从入门到完全理解可能需要10个小时(哈哈哈,以我自己...

    objc94 评论0 收藏0
  • PHP算法之四大基础算法

    摘要:而在证明算法是正确的基础上,第二步就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。 showImg(https://segmentfault.com/img/remote/1460000016451712?w=800&h=341); 前言 虽然工作中,你觉得自己并没有涉及到算法这方面的东西,但是算法是程序的...

    isLishude 评论0 收藏0
  • PHPer面试指南-算法篇

    摘要:快速排序快速排序是对冒泡排序的一种改进。获取中间数两值相等,返回元素比目标大,查找左部元素比目标小,查找右部查找失败扩展阅读冒泡排序实现快速排序实现各种经典算法常见算法面试篇实现二分查找法 本书的 GitHub 地址:https://github.com/todayqq/PH... 算法可以说是大厂的必考题,对于算法,一定要理解其中的精髓、原理。 冒泡排序 冒泡排序的原理:一组数据,...

    SimpleTriangle 评论0 收藏0
  • PHP数组排序算法实现(14种)

    摘要:本文将介绍快速排序计数排序梳排序堆排序归并排序希尔排序选择排序插入排序地精排序联合冒泡排序鸡尾酒排序冒泡排序奇偶排序使用标志的冒泡排序种排序算法的实现。是一种不稳定的排序算法。 本文将介绍快速排序、计数排序、梳排序、堆排序、归并排序、希尔排序、选择排序、插入排序、地精排序、联合冒泡排序、鸡尾酒排序、冒泡排序、奇偶排序、使用标志的冒泡排序14种排序算法的实现。本文是由于阅读了文章《测试评...

    aisuhua 评论0 收藏0
  • PHP 快速排序算法

    摘要:概念这里借用百度百科的一张图来,非常形象快速排序算法是对冒泡算法的一个优化。获取已经打乱了顺序的数组快速排序这里引用的是我之前写的冒泡算法排序冒泡运行结果 概念 这里借用百度百科的一张图来,非常形象:showImg(https://segmentfault.com/img/bVdlR6); 快速排序算法是对冒泡算法的一个优化。他的思想是先对数组进行分割, 把大的元素数值放到一个临时数...

    Coly 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<