冒泡排序, 顾名思义,就是排序时,最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,将大的元素交换至右端,所以大的元素会不断的往右移动,直到适当的位置为止。
基本的气泡排序法可以利用旗标的方式稍微减少一些比较的时间,当寻访完数组后都没有发生任何的交换动作,表示排序已经完成,而无需再进行之后的循环比较与交换动作,例如:
排序前:
95, 27, 90, 49, 80, 58, 6, 9, 18, 50
第 1 次排序:27 90 49 80 58 6 9 18 50 95
第 2 次排序:27 49 80 58 6 9 18 50 90 95
第 3 次排序:27 49 58 6 9 18 50 80 90 95
第 4 次排序:27 49 6 9 18 50 58 80 90 95
第 5 次排序:27 6 9 18 49 50 58 80 90 95
第 6 次排序:6 9 18 27 49 50 58 80 90 95
第 7 次排序:6 9 18 27 49 50 58 80 90 95 -- 没有改变次序,排序完成
Java代码实现:
/**/
/*
*
* 冒泡排序
* @param data:等待排序整型数组
* data = { 95, 27, 90, 49, 80, 58, 6, 9, 18, 50 }
* 排序结果:
* 第 1 次排序:27 90 49 80 58 6 9 18 50 95
* 第 2 次排序:27 49 80 58 6 9 18 50 90 95
* 第 3 次排序:27 49 58 6 9 18 50 80 90 95
* 第 4 次排序:27 49 6 9 18 50 58 80 90 95
* 第 5 次排序:27 6 9 18 49 50 58 80 90 95
* 第 6 次排序:6 9 18 27 49 50 58 80 90 95
* 第 7 次排序:6 9 18 27 49 50 58 80 90 95
*/
public
void
sort(
int
[] data)
{
int
max
=
data.length;
boolean
hasChange
=
true
;
for
(
int
i
=
0
; i
<
max
-
1
&&
hasChange; i
++
)
{
hasChange
=
false
;
for
(
int
j
=
0
; j
<
max
-
i
-
1
; j
++
)
{
if
(data[j
+
1
]
<
data[j])
{
int
temp
=
data[j];
data[j]
=
data[j
+
1
];
data[j
+
1
]
=
temp;
hasChange
=
true
;
}
}
System.out.print(
"
第
"
+
(i
+
1
)
+
"
次排序:
"
);
for
(
int
k
=
0
; k
<=
max
-
1
; k
++
)
{
System.out.print(data[k]
+
"
"
);
}
System.out.println();
}
}