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. 【教训】null == '',改造ThinkSNS 系统里面的一个缓存管理函数S()后,留下一个大bug

    本来想简化 ThinkSNS 系统里面的一个缓存管理函数: <?php /** * 用来对应用缓存信息的读.写.删除 * $expire = null/0 表示永久缓存,否则为缓存有效期 */ ...

  2. sql server mvp 發糞塗牆

    http://blog.csdn.net/dba_huangzj/article/details/38295753

  3. Matlab中find函数陷阱

    a = [ 1 2 3 3  3]; 如果a==3 返回[ 0 0 1  1 1]; find(a==3) 返回[3 4 5],这才是想要的下标.

  4. Delphi CRC算法, 不错

    http://www.cnblogs.com/tangqs/archive/2011/12/08/2280255.html

  5. 【mybatis】mybatis中 的# 和 $的区别

    mybatis中 的# 和 $的区别 参考地址:https://www.cnblogs.com/sxdcgaq8080/p/10869144.html

  6. IMAP IDLE模式(推送邮件)

    在电子邮件技术中,IDLE是RFC 2177中描述的一项IMAP功能,它允许客户端向服务器表明它已准备好接受实时通知. Internet消息访问协议IMAP4协议,它要求客户端轮询服务器来更改所选中的 ...

  7. WEB服务器、应用程序服务器、HTTP服务器区别 【转】

    WEB服务器.应用程序服务器.HTTP服务器有何区别?IIS.Apache.Tomcat.Weblogic.WebSphere都各属于哪种服务器,这些问题困惑了很久,今天终于梳理清楚了: Web服务器 ...

  8. BeagleBone Black板第四课:简单LED控制实验

    BBB板第四课:简单LED控制实验 学习BBB板的终于目的是想像单片机一样做控制,但控制思路全然不一样(Linux下控制硬件设备实质就是对相关设备虚拟文件的读写).研究了几天头都大了还是没有进展,网上 ...

  9. 关于Docker&kubernetes的一些问题

    本文是我自己在学习docker以及kubernetes的过程中遇到的一些问题,以及同事在听过培训之后一些问题,事后我自己去网上找些资料以及问一些资深大牛,我在此做一个归纳总结,将这些问题的解答做一个分 ...

  10. PS如何为图片添加四面投影

    如图所示,像四周的投影 很像Areo效果的Windows7. 用这样的图片做成PNG透明的效果非常好. 我们不妨仔细研究上图的两个角,发现其实只是简单的投影效果而已. 简单的使用投影效果即可.注意混合 ...