PHP实现插入排序算法
插入排序(Insertion Sort),是一种较稳定、简单直观的排序算法。插入排序的工作原理,是通过构建有序序列,对于未排序的数据,在有序序列中从后向前扫描,找到合适的位置并将其插入。插入排序,在最好情况下,时间复杂度为O(n);在最坏情况下,时间复杂度为O(n2);平均时间复杂度为O(n2)。
插入排序示例图:
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>'
;
?>
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)