插入排序(Insertion Sort),是一种较稳定、简单直观的排序算法。插入排序的工作原理,是通过构建有序序列,对于未排序的数据,在有序序列中从后向前扫描,找到合适的位置并将其插入。插入排序,在最好情况下,时间复杂度为O(n);在最坏情况下,时间复杂度为O(n2);平均时间复杂度为O(n2)。

插入排序示例图:

PHP实现插入排序算法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
/**
 
* 数据结构与算法(PHP实现) - 插入排序(Insertion Sort)。
 
*
 
* @author 创想编程(TOPPHP.ORG)
 
* @copyright Copyright (c) 2013 创想编程(TOPPHP.ORG) All Rights Reserved
 
* @license http://www.opensource.org/licenses/mit-license.php MIT LICENSE
 
* @version 1.0.0 - Build20130613
 
*/
class
InsertionSort {
  
/**
   
* 需要排序的数据数组。
   
*
   
* @var array
   
*/
  
private
$data
;
 
  
/**
   
* 数据数组的长度。
   
*
   
* @var integer
   
*/
  
private
$size
;
 
  
/**
   
* 数据数组是否已排序。
   
*
   
* @var boolean
   
*/
  
private
$done
;
 
  
/**
   
* 构造方法 - 初始化数据。
   
*
   
* @param array $data 需要排序的数据数组。
   
*/
  
public
function
__construct(
array
$data
) {
    
$this
->data =
$data
;
    
$this
->size =
count
(
$this
->data);
    
$this
->done = FALSE;
  
}
 
  
/**
   
* 插入排序。
   
*/
  
private
function
sort() {
    
$this
->done = TRUE;
 
    
for
(
$i
= 1;
$i
<
$this
->size; ++
$i
) {
      
$current
=
$this
->data[
$i
];
 
      
if
(
$current
<
$this
->data[
$i
- 1]) {
        
for
(
$j
=
$i
- 1;
$j
>= 0 &&
$this
->data[
$j
] >
$current
; --
$j
) {
          
$this
->data[
$j
+ 1] =
$this
->data[
$j
];
        
}
 
        
$this
->data[
$j
+ 1] =
$current
;
      
}
    
}
  
}
 
  
/**
   
* 获取排序后的数据数组。
   
*
   
* @return array 返回排序后的数据数组。
   
*/
  
public
function
getResult() {
    
if
(
$this
->done) {
      
return
$this
->data;
    
}
 
    
$this
->sort();
 
    
return
$this
->data;
  
}
}
?>

示例代码
1
2
3
4
<?php
$insertion
=
new
InsertionSort(
array
(9, 1, 5, 3, 2, 8, 6));
echo
'<pre>'
, print_r(
$insertion
->getResult(), TRUE),
'</pre>'
;
?>

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

  1. 排序系列 之 折半插入排序算法 —— Java实现

    基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...

  2. 排序系列 之 直接插入排序算法 —— Java实现

    直接插入排序算法 基本思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的 ...

  3. 插入排序---希尔插入排序算法(Javascript版)

    取一个小于n的整数作为第一个增量,把序列分组.所有距离为增量的倍数的元素放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量(第二个<第一个)重复上述的分组和排序,直至所取的增量=1, ...

  4. 插入排序---直接插入排序算法(Javascript版)

    将n个元素的数列分为已有序和无序两个部分. 数列:{a1,a2,a3,a4,…,an} 将该数列的第一元素视为有序数列,后面都视为无序数列: {{a1},{a2,a3,a4,…,an}} 将无序数列中 ...

  5. 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)

    插入排序算法主要分为:直接插入算法,折半排序算法(二分插入算法),希尔排序算法,后两种是直接插入算法的改良.因此直接插入算法是基础,这里先进行直接插入算法的分析与编码. 直接插入算法的排序思想:假设有 ...

  6. 《算法4》2.1 - 插入排序算法(Insertion Sort), Python实现

    排序算法列表电梯: 选择排序算法:详见 Selection Sort 插入排序算法(Insertion Sort):非常适用于小数组和部分排序好的数组,是应用比较多的算法.详见本文 插入排序算法的语言 ...

  7. 直接插入排序算法:ArrayList实现和数组实现

    直接插入排序算法思想: 排序区间R[1..n]: 在排序的过程中,整个排序区间被分为两个子区间: 有序区R[ 1 ... i-1 ]和无序区R[ i ... n ]: 共进行n-1趟排序,每趟排序都是 ...

  8. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  9. C/C++ -- 插入排序算法

    索引: 目录索引 参看代码 GitHub: Sort.cpp 代码简要分析说明: 1.for(int i=1;i<nSize;i++) 这个外层的for循环, [0][1],[1][2],[2] ...

随机推荐

  1. 一个能够自己主动生成静态库,自己主动安装程序的Makefile

    .PHONY:clean install CC=g++ CFLAGS=-Wall -g BIN=libecho.a INCLUDE=echo SRC=src OBJS=Socket.o Rio.o T ...

  2. git使用说明

    1,git clone git://github.com/schacon/simplegit.git git工作目录,暂存目录,本地代码仓库都有代码了. 2,git pull git://github ...

  3. EasyUI - Progressbar 进度条控件

    效果: html代码: <div id="p" style="width:400px;"></div> JS代码: $(function ...

  4. “聊天剽窃手”--ptrace进程注入型病毒

    近日,百度安全实验室发现了一款"聊天剽窃手"病毒.该病毒可以通过ptrace方式注入恶意代码至QQ.微信程序进程.恶意代码可以实时监控手机QQ.微信的聊天内容及联系人信息. 该病毒 ...

  5. NET Core全新的配置管理

    NET Core全新的配置管理[共9篇] 提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来 ...

  6. centos下chm阅读器

    xchm kchmviewer chmsee

  7. Android---OpenGL ES之添加动作

    本文译自:http://developer.android.com/training/graphics/opengl/motion.html 在屏幕上绘制对象是OpenGL的最基本功能,你可以使用其他 ...

  8. Keywords Search (ac 自己主动机)

    Keywords Search Problem Description In the modern time, Search engine came into the life of everybod ...

  9. codeforces.com/contest/325/problem/B

    http://codeforces.com/contest/325/problem/B B. Stadium and Games time limit per test 1 second memory ...

  10. php中实现快排与冒泡排序

    快排 <?php function quicksort($str){ if(count($str)<=1) return $str;//如果个数不大于一,直接返回 $key=$str[0] ...