一直以来,算法在我的认知里都很神奇。因为它们总在不经意之间就改变了世界。我们也是后来的得益者,站在巨人的肩膀上,才能看的更远。感谢那些不曾认识的甲乙丙。

建议去看见下我的另一篇文章,关于时间复杂度的介绍,链接,有助于大家科学的了解算法的优劣

冒泡排序

/**  冒泡排序 (效率比较低)**  外层循环决定循环层数*  内层,两两比较,交换位置*  每层循环过后,后面的值总是有序的最大(最小)的值,下次就无需去比较他们。*  加入变量flag,如果没有交换位置,则说明顺序是对的,可以跳出循环结束了*/$arr = array();$arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45);$len = count($arr);for($i=1;$i<$len;$i++){$flag = true;for($j=0;$j<$len-$i;$j++){if($arr[$j]>$arr[$j+1]){$flag = false;$temp = $arr[$j];$arr[$j] = $arr[$j+1];$arr[$j+1] =$temp;}}if($flag){break;}}print_r($arr);

选择排序

/** 选择排序 (比冒泡效率高)*   *   外层决定循环层数*   选择排序就是默认当前值为最小值,记录下标,然后进行循环比较,记录最小(最大)值的下标,最后交换两者的值。这样第一个值就是最小(最大)值。*   然后,依次,循环下去。最后得到的就是有序的数组*/$arr = array();$arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45);$len = count($arr);for($i=0;$i<$len-1;$i++){$p = $i;  //默认当前位置的值即为最小,记录下下标。 for($j=$p+1;$j<$len;$j++){if($arr[$p]>$arr[$j]){$p = $j;         //如果当前值比默认值小。则记录其下标}}   if($p !=$i){$temp = $arr[$p];$arr[$p] = $arr[$i];$arr[$i] = $temp;}}print_r($arr);

插入排序(效率也比冒泡快)

/** 插入排序*   *   外层决定循环层数,把当前值作为插入值去和前面的值进行比较*   前面的值总是有序的,插入的值只需要和前面的值进行比较,确定最终位置就可以了*   循环排序就好了*/$arr = array();$arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45);$len = count($arr);for($i=1;$i<$len;$i++){$temp = $arr[$i];for($j=$i-1;$i>=0;$j--){if($arr[$j]>$temp){$arr[$j+1] = $arr[$j];$arr[$j] = $temp;}else{break;}}}print_r($arr);

快速排序 (20世纪十大排序方法之一)

/** 快速排序*   * 首先选取一个值,作为标尺,把大于他的放到right_array中,小于他的放到left_array中,递归调用* 直到数组数为1,则返回,最后合并起来就是结果*/
function quick_sort($arr) {  //先判断是否需要继续进行  $length = count($arr);  if($length <= 1) {  return $arr;  }  //如果没有返回,说明数组内的元素个数 多余1个,需要排序  //选择一个标尺  //选择第一个元素  $base_num = $arr[0];  //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内  //初始化两个数组  $left_array = array();//小于标尺的  $right_array = array();//大于标尺的  for($i=1; $i<$length; $i++) {  if($base_num > $arr[$i]) {  //放入左边数组  $left_array[] = $arr[$i];  } else {  //放入右边  $right_array[] = $arr[$i];  }  }  //再分别对 左边 和 右边的数组进行相同的排序处理方式  //递归调用这个函数,并记录结果  $left_array = quick_sort($left_array); $right_array = quick_sort($right_array);  //合并左边 标尺 右边  return array_merge($left_array, array($base_num), $right_array);
}
$arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45);
$res = quick_sort($arr);
print_r($res);die;

千里之行,始于足下。加油!

参考地址
http://blog.csdn.net/guowenwen_0416/article/details/52778782
http://blog.csdn.net/baidu_30000217/article/details/53311840
http://www.jb51.net/article/57277.htm
http://blog.chinaunix.net/uid-28894229-id-4625483.html

php实现的几种基本算法相关推荐

  1. 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)

    编译 | 林椿眄 出品 | AI科技大本营(公众号ID:rgznai100) [AI科技大本营导读]Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在G ...

  2. 数据科学家必须要掌握的5种聚类算法

    编译 | AI科技大本营 参与 |  刘 畅 编辑 |  明 明 [AI科技大本营导读]聚类是一种将数据点按一定规则分群的机器学习技术.给定一组数据点,我们可以使用聚类算法将每个数据点分类到一个特定的 ...

  3. php主要算法设计,四种排序算法设计(PHP)

    标签 详细分析 /** * 四种排序算法设计(PHP) * * 1) 插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当 ...

  4. 4.聚类的五种主要算法

    原博文: 聚类是一种机器学习技术,它涉及到数据点的分组.给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组.理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该 ...

  5. 如下10种分类算法对比Classifier comparison

    如下10种分类算法对比 names = ["Nearest Neighbors", "Linear SVM", "RBF SVM", &qu ...

  6. 一文盘点5种聚类算法,数据科学家必备!

    一文盘点5种聚类算法,数据科学家必备! https://www.toutiao.com/a6638164486228296195/ 来源:中国统计网 本文约4100字,建议阅读10+分钟. 本文为你分 ...

  7. 三张图读懂机器学习 :基本概念、五大流派与九种常见算法

    机器学习正在进步,我们似乎正在不断接近我们心中的人工智能目标.语音识别.图像检测.机器翻译.风格迁移等技术已经在我们的实际生活中开始得到了应用,但机器学习的发展仍还在继续,甚至被认为有可能彻底改变人类 ...

  8. 位图排序 大数据_干货分享:大话12种排序算法

    干货分享:大话12种排序算法 常见的排序算法: 快速排序.堆排序.归并排序.选择排序 插入排序.二分插入排序 冒泡排序.鸡尾酒排序 桶排序.计数排序.基数排序.位图排序 技能点: 1.归并排序在O(N ...

  9. python 三种聚类算法(K-means,AGNES,DBScan)

    python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 更新时间:2019年06月27日 14:44:44   作者:weixin_42134141 这篇文章主要介绍了pyth ...

  10. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)

    10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...

最新文章

  1. c语言 程序 作文,编程之乐作文600字
  2. Asp.net(C#)-彩色图片转化为黑白
  3. mysql获取多张表中的数据_mysql 之多表查询
  4. laravel mysql 视图_Laravel框架控制器,视图及模型操作图文详解
  5. python 进入E盘_anaconda python环境与原有python环境的坑
  6. primefaces_Primefaces单选按钮,复选框示例
  7. 下一代防火墙评测--网界
  8. JAVA Eclipse如何安装Swing
  9. dedecms关于访问量的修改
  10. 【VSCode PlatformIO】 STC单片机开发头文件制作与添加方法
  11. linux下查看U盘文件
  12. 新人如何顺利度过试用期,让你受益终身的几个技能
  13. 鸿蒙系统是手机系统还是电脑系统,鸿蒙系统能兼容手机电脑和智能设备,这是怎样实现的?...
  14. obs-studio 二次封装 (四)obs 音视频采集到推流大体流程图
  15. 树莓派开发——基础配置
  16. 【蓝桥杯练习系统】【入门训练】【BEGIN-1】A+B问题 (Java)
  17. 用秦九昭公式计算多项式
  18. 5000词学英语——DAY2
  19. Patroni 使用 raft 作为 DCS
  20. CCF 2019-12 第三题 化学方程式配平(100分)

热门文章

  1. 在线BASE64加密解密、UrlEncode编码/解码、native/ascii在线转换工具 -toolfk程序员工具网
  2. 小米9网络位置服务器,如何查看小米9手机当前的IP地址
  3. 计算机教室规则英语作文,班级规则初中英语作文
  4. 破解携程中文验证码爬取机票价格数据
  5. 安超云生态 | 安超云与杉岩数据完成产品互兼容认证 携手打造协同生态
  6. vs2017\vs2019 VGG19处理cifar-10数据集的TensorFlow实现
  7. 计算机行业未来20年前景,未来20年,哪个专业最有“前景“?符合一定要报
  8. 位居榜首 | 未来智安荣登CCIA「2022年中国网安产业潜力之星」榜单
  9. netstat -ano|findstr
  10. html引入第三方库,基于webpack实现多html页面开发框架七 引入第三方库如jquery