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. NSOperationQueue 和 NSOperation

    The NSOperationQueue class regulates the execution of a set of NSOperation objects. After being adde ...

  2. Myeclipse 编译等级

    1.Java compiler level does not match the version of the installed Java project facet. 问题描述:编译等级不匹配 解 ...

  3. [ACM] POJ 1035 Spell checker (单词查找,删除替换添加不论什么一个字母)

    Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18693   Accepted: 6844 De ...

  4. fiddler实现后端接口 mock(不需要修改开发代码)

    转载:http://blog.csdn.net/huazhongkejidaxuezpp/article/details/50435552 步骤   1.  获取 接口 定义(接口返回的json串) ...

  5. Solidworks 如何快速完全定义草图

    工具-尺寸标注-完全定义草图

  6. Codeforces #263 div2 解题报告

    比赛链接:http://codeforces.com/contest/462 这次比赛的时候,刚刚注冊的时候非常想好好的做一下,可是网上喝了个小酒之后.也就迷迷糊糊地看了题目,做了几题.一觉醒来发现r ...

  7. AnimatorStateInfo

    AnimatorStateInfo Namespace: UnityEngine   Description Information about the current or next state. ...

  8. 推荐系统学习(2)——基于TF-IDF的改进

    使用用户打标签次数*物品打标签次数做乘积的算法尽管简单.可是会造成热门物品推荐的情况.物品标签的权重是物品打过该标签的次数,用户标签的权重是用户使用过该标签的次数.从而导致个性化的推荐减少,而造成热门 ...

  9. Linux下实现文件双向同步

    修改的地方时:私钥和公约处. 其次 vi /root/.unison/default.prf 这个文件在这个位置 root = /tmp/test root = ssh://root@10.10.3. ...

  10. python——SyntaxError:invalid syntax

    格式不对,tab 或空格的格式不统一导致