冒泡排序, 顧名思義,就是排序時,最大的元素會如同氣泡一樣移至右端,其利用比較相鄰元素的方法,將大的元素交換至右端,所以大的元素會不斷的往右移動,直到適當的位置為止。
基本的氣泡排序法可以利用旗標的方式稍微減少一些比較的時間,當尋訪完數組后都沒有發(fā)生任何的交換動作,表示排序已經完成,而無需再進行之后的循環(huán)比較與交換動作,例如:
排序前:???
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();
????????}
????}