冒泡排序(Bubble 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
<?php
class
BubbleSort {
const
SORT_NORMAL = 1;
const
SORT_DUPLEX = 2;
private
$data ;
private
$size ;
private
$done ;
public
function __construct( array
$data ) {
$this ->data =
$data ;
$this ->size =
count ( $this ->data);
$this ->done = FALSE;
}
private
function swap( $x ,
$y ) {
$temp
= $this ->data[ $x ];
$this ->data[ $x ] =
$this ->data[ $y ];
$this ->data[ $y ] =
$temp ;
}
private
function sort() {
$this ->done = TRUE;
for
( $i
= 1; $i <
$this ->size; ++ $i ) {
$swap
= 0;
for
( $j
= $this ->size - 1;
$j > $i
- 1; -- $j ) {
if
( $this ->data[ $j ] <
$this ->data[ $j
- 1]) {
$this ->swap( $j
- 1, $j );
++ $swap ;
}
}
if
(0 === $swap ) {
break
;
}
}
}
private
function duplexSort() {
$this ->done = TRUE;
for
( $i
= 1; $i <=
floor ( $this ->size / 2); ++ $i ) {
$swap
= 0;
for
( $j
= $this ->size - 1,
$k = $i
- 1;
$j
> $i
- 1 && $k <
$this ->size - 1; -- $j , ++ $k ) {
if
( $this ->data[ $j ] <
$this ->data[ $j
- 1]) {
$this ->swap( $j
- 1, $j );
++ $swap ;
}
if
( $this ->data[ $k ] >
$this ->data[ $k
+ 1]) {
$this ->swap( $k ,
$k + 1);
++ $swap ;
}
}
if
(0 === $swap ) {
break ;
}
}
}
public
function getResult( $sort
= self::SORT_NORMAL) {
if
( $this ->done) {
return
$this ->data;
}
switch
( $sort ) {
case
self::SORT_DUPLEX:
$this ->duplexSort();
break ;
case
self::SORT_NORMAL:
default :
$this ->sort();
break ;
}
return
$this ->data;
}
}
?>
|
示例代码
1
2
3
4
|
<?php
$bubble
= new BubbleSort( array (35, 75, 92, 41, 27, 58));
echo
'<pre>' , print_r( $bubble ->getResult(BubbleSort::SORT_DUPLEX), TRUE),
'</pre>' ;
?>
|
分享到:
相关推荐
1冒泡排序 2改进的冒泡排序,在一次冒泡的过程中,如果没有发生交换,则已经有序 3进一步改进的冒泡排序,如果在某次冒泡过程中,最后一次进行交换的位置为flag,则表示flag之后的序列已经有序,那么下...4双向冒泡排序
设计一个双向冒泡排序算法。要求用C/C++实现。
用php实现冒泡排序用php实现冒泡排序用php实现冒泡排序用php实现冒泡排序用php实现冒泡排序用php实现冒泡排序
VerilogHDL/VHDL开发之Verilog实现冒泡排序
冒泡排序算法,包含前向冒泡、后向冒泡以及双向冒泡
汇编语言编写的冒泡排序程序代码,从小到大排序,并以十进制字符串的形式输出排序结果。
用java实现冒泡排序算法,开发者必会的几种算法
win32汇编语言实现冒泡排序,全部的代码插入在文档的最下面。
,程序实现冒泡排序十万个数(调用),可以改成输入。并附加程序运行计时,用于测试时间复杂度,可以移除
算法(冒泡,选择,插入,数组排序) package Teacher; import java.io.*; import java.util.Scanner; public class Tset { public static void main(String args[]) throws IOException { // 需要排序的数组,...
北邮 计算机系统结构实验四-使用MIPS指令实现冒泡排序
数据结构冒泡排序算法 数据结构冒泡排序算法
初学LabelView写的冒泡排序。 随机产生数组元素,并进行冒泡排序。
冒泡排序算法两种C语言实现方法,在VC开发环境下验证通过
TIA博途中实现冒泡排序的两种SCL语言算法
php优化版本的冒泡排序算法
冒泡排序的优化算法,减少时间和次数,引入布尔函数
主要介绍了Java实现冒泡排序与双向冒泡排序算法的代码示例,值得一提的是所谓的双向冒泡排序并不比普通的冒泡排序效率来得高,注意相应的时间复杂度,需要的朋友可以参考下
C++ 冒泡排序算法实现代码,用C++编写的冒泡排序算法代码。
* 冒泡排序: * 每次在无序队列里将相邻两个数一次进行比较, * 将小数调到前面,逐次比较,直至将最大的数移到 * 最后。将剩下的N-1个数继续比较,将次大数移至 * 倒数第二位。