冒泡排序详解及优化
1. 思路:
比较数组中,两个相邻的元素,如果第一个比第二个大,交换位置;每次比较,会产生出一个最大,或者最小的数;下一轮则可少一次排序;依次循环,直到结束。
2. 图解分析:
以数组int[] arr = {6, 3, 5, 7, 0}为例,图解分析如图所示:
总结图解分析。外层共循环了arrr.length-1次,外层循环增加一次,对应内层循环就减少一次。
时间复杂度=O(n2);空间复杂度=O(1), 是一种稳定的排序算法。
3. 代码实现:
import java
.util
.Arrays
;
import java
.util
.Scanner
;
public class Test {
public static void main(String
[] args
) {
Scanner scanner
= new Scanner(System
.in
);
int[] a
= new int[10];
for(int i
= 0; i
< a
.length
; i
++){
a
[i
] = scanner
.nextInt();
}
BubbleSort(a
);
System
.out
.println(Arrays
.toString(a
));
scanner
.close();
}
public static void BubbleSort(int[] arr
){
int t
;
for(int i
= 0; i
< arr
.length
-1; i
++){
for(int j
= 0; j
< arr
.length
-i
-1; j
++){
if(arr
[j
] > arr
[j
+1]){
t
= arr
[j
];
arr
[j
] = arr
[j
+1];
arr
[j
+1] = t
;
}
}
}
}
}
4. 冒泡排序优化
public static void BubbleSort(int[] arr
){
int t
;
for(int i
= 0; i
< arr
.length
-1; i
++){
boolean flag
= false;
for(int j
= 0; j
< arr
.length
-i
-1; j
++){
if(arr
[j
] > arr
[j
+1]){
t
= arr
[j
];
arr
[j
] = arr
[j
+1];
arr
[j
+1] = t
;
flag
= true;
}
}
if(flag
== false){
break;
}
}
}