冒泡排序步骤:
![](https://i-blog.csdnimg.cn/blog_migrate/18ef419528f5ebe349d153e9c0cb32df.png)
简单的实现冒泡排序。
//冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] a = {5,7,9,4,1,3,2,8};
bubble(a);
}
private static void bubble(int[] a) {
for(int j = 0;j < a.length - 1;j++){
for(int i = 0;i < a.length - 1; i++){
if(a[i] > a[i+1]){
swap(a,i,i+1);
}
}
System.out.println("第"+ j +"轮冒泡" + Arrays.toString(a));
}
}
public static void swap(int[] a,int i,int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
优化一:因为冒泡排序有时候a[i]和a[i+1]不会发生交换,但是仍然会判断a[i]和a[i+1],所以为了优化程序,可以通过以下代码来优化。
//冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] a = {5,7,9,4,1,3,2,8};
bubble(a);
}
private static void bubble(int[] a) {
for(int j = 0;j < a.length - 1;j++){
boolean swapped = false;//判断a[i]和a[i+1]是否发生交换
for(int i = 0;i < a.length - 1 - j; i++){
if(a[i] > a[i+1]){
swap(a,i,i+1);
swapped = true;
}
}
System.out.println("第"+ j +"轮冒泡" + Arrays.toString(a));
if(!swapped){
break;
}
}
}
public static void swap(int[] a,int i,int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
还可以优化,优化方式为:减少比较次数来优化程序
![](https://i-blog.csdnimg.cn/blog_migrate/dec7bea56022d386af3b7443e7fce8ce.png)
//冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] a = {5,7,9,4,1,3,2,8};
bubble(a);
}
private static void bubble(int[] a) {
int n = a.length - 1;
while (true){
int last = 0;//表示最后一次交换索引的位置
for(int i = 0;i < n; i++){
System.out.println("比较次数"+(i+1));
if(a[i] > a[i+1]){
swap(a,i,i+1);
last = i;
}
}
n=last;
System.out.println(Arrays.toString(a));
if(n == 0){
break;
}
}
}
public static void swap(int[] a,int i,int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}