1. /**
  2. 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。
  3. 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,
  4. 找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),
  5. 因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
  6. 5,2,4,6,1,3
  7. 2,5,4,6,1,3
  8. 2,4,5,6,1,3
  9. 2,4,5,6,1,3
  10. 1,2,4,5,6,3
  11. 1,2,3,4,5,6
  12. 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
  13. 从第一个元素开始,该元素可以认为已经被排序
  14. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  15. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  16. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  17. 将新元素插入到该位置后
  18. 重复步骤2~5
  19. */
  20. $ar = array(5,2,4,6,1,3);
  21. insertSort($ar);
  22. function insertSort($arr) {
  23. $len = count($arr);
  24. for ($i = 1; $i < $len; $i++) {
  25. // 当前值
  26. $key = $arr[$i];
  27. // 当前位置
  28. $pos = $i;
  29. // 如是当前位置 >0 && 当前值的前一个值 > 当前值 选出最值
  30. while ($pos > 0 && $arr[$pos - 1] > $key) {
  31. // 当前值  =  前一个值
  32. $arr[$pos] = $arr[$pos - 1];
  33. // 当前位置后移
  34. $pos = $pos - 1;
  35. }
  36. // 找到当前值的位置
  37. $arr[$pos] = $key;
  38. echo join(',', $arr);
  39. echo '<br>';
  40. }
  41. return $arr;
  42. }

PHP插入法排序的更多相关文章

  1. ACM——直接插入法排序

    NOJ——1062 直接插入排序 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:446            测试通过:212 ...

  2. <转>Java 常用排序算法小记

    排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...

  3. 常用排序算法java实现

    写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...

  4. PHP排序的几种方法

    // 冒泡排序 function BubbleSort($arr) { // 获得数组总长度 $num = count($arr); // 正向遍历数组 for ($i = 1; $i < $n ...

  5. 希尔排序(java)

    希尔排序是对直接插入排序的一种优化,基本思想是把待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入法排序:小组的个数逐次缩小:当完成了所有数据元素都在一个组内的排序后排序过程结束.希尔排 ...

  6. 三种排序方法(c语言)

    #include "stdio.h" void main() {void read_data(int a[],int n); void write_data(int a[],int ...

  7. 数据结构(四十六)插入排序(1.直接插入排序(O(n²)) 2.希尔排序(O(n3/2)))

    一.插入排序的基本思想 从初始有序的子集合开始,不断地把新的数据元素插入到已排列有序子集合的合适位置上,使子集合中数据元素的个数不断增多,当子集合等于集合时,插入排序算法结束.常用的 插入排序算法有直 ...

  8. 万字长文带你掌握Java数组与排序,代码实现原理都帮你搞明白!

    查找元素索引位置 基本查找 根据数组元素找出该元素第一次在数组中出现的索引 public class TestArray1 { public static void main(String[] arg ...

  9. 五种C语言非数值计算的常用经典排序算法

    摘要:排序是计算机的一种操作方法,其目的是将一组"无序"的记录序列调整为"有序"的记录序列,主要分为内部排序和外部排序. 排序 排序是计算机的一种操作方法,其目 ...

随机推荐

  1. Vue + Webpack + Vue-loader 系列教程

    http://www.cnblogs.com/terry01/p/5953464.html 介绍 Vue-loader 是什么? vue-loader 是一个加载器,能把如下格式的 Vue 组件转化成 ...

  2. Xcode 5 单元测试(一)使用XCTest进行单元测试

    在Objc.io #1的Testing View Controllers中讲解的就是单元测试的相关内容.本文说下如何通过Xcode 5中集成的XCTest框架进行简单的单元测试. 什么是单元测试 首先 ...

  3. Android使用FFMpeg实现推送视频直播流到服务器

    背景 在过去的2015年中,视频直播页的新宠无疑是户外直播.随着4G网络的普及和覆盖率的提升,主播可以在户外通过手机进行直播.而观众也愿意为这种可以足不出户而观天下事的服务买单.基于这样的背景,本文主 ...

  4. Date类型数据的加一天

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { if (startDate != null &am ...

  5. 第一章 初识shiro

    shiro学习教程来自开涛大神的博客:http://jinnianshilongnian.iteye.com/blog/2018936 第一章 初识shiro 简单了解shiro主要记住三张图即可. ...

  6. spring boot 缺点优点?

    作者:八面山人链接:https://www.zhihu.com/question/39483566/answer/246333825来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  7. EJB vs Spring

    转载: Spring 自从2003年发布以来,一直是Java开源框架的奇迹之一.从2000年开始,伴随着B/S架构逐渐引入企业应用软件开发的领域,Java就逐渐成为企业应用开发的主流技术,一直到200 ...

  8. .Net程序测试使用阿里云OCS开放缓存服务

     首先需要有一个阿里的OCS实例和ECS云服务器 请确认这两个是在同一个可用区的,这个很重要! 这两个可以在阿里云官网申请得到 拿到OCS之后 进入OCS控制台,点击下面的客户端下载选择.Net客 ...

  9. Nginx常用Rewrite(伪静态规则)WordPress/PHPCMS/ECSHOP/ShopEX/SaBlog/Discuz/DiscuzX/PHPWind/Typecho/DEDECMS

    目前已收集Wordpress.Wordpress二级目录.PHPCMS.ECSHOP.ShopEX.SaBlog.Discuz.Discuz X.PHPWind.Typecho.DEDECMS: Wo ...

  10. 2017.9.15 mybatis批量插入后实现主键回填

    参考来自:mybatis mysql 批量insert 返回主键 注意:必须要在mybatis3.3.1及其以上才能实现. 1.service List branchEntryList = (Arra ...