时间复杂度 O(n^2)
package com.sort;
public class BubbleSort {
public static void swap(int list[], int i, int j){
int temp;
temp = list[i];
list[i] = list[j];
list[j] = temp;
}
public static void print(int list[]){
for(int i=0;i<list.length;i++){
System.out.println(list[i]);
}
}
public static void sort01(int list[]){
/**
* 从前往后冒泡
* 第1次循环(从0到9)找到最大的数放在最后一个位置(9)
* 第2次循环(从0到8)找到第2大的数放在倒数第2的位置(8)
* 第3次循环(从0到7)找到第2大的数放在倒数第2的位置(7)
* 依次类推...
* */
for(int i=0;i<list.length-1;i++){
for(int j=0;j<list.length-i-1;j++){
if(list[j] > list[j+1]){
swap(list,j,j+1);
}
}
}
}
public static void sort02(int list[]){
/**
* 从后往前冒泡
* 第1次循环(从9到0)找到最小的数放在第1个位置(0)
* 第2次循环(从9到1)找到第2小的数放在第2的位置(1)
* 第3次循环(从9到2)找到第3小的数放在第3的位置(2)
* 依次类推...
* */
for(int i=0;i<list.length-1;i++){
for(int j=list.length-1-1;j>=i;j--){
if(list[j] > list[j+1]){
swap(list,j,j+1);
}
}
}
}
public static void sort03(int list[]){
/**
* 冒泡的优化
* [2,1,3,4,5,6,7,8,9]
* 如果序列是这样的
* 刚开始flag=true
* 进入循环flag=false
* 第1次循环,flag=true,说明这次循环有数据进行了交换
* 循环后结果:[1,2,3,4,5,6,7,8,9]
* 进入第2次循环,flag=false,循环结束后没有进行数据交换,说明后者都大于前者,flag还是false
* 所以就不用再进行循环了,已经排好序了
*
* */
boolean flag = true;
for(int i=0;i<list.length-1 && flag;i++){
flag = false;
for(int j=list.length-2;j>=i;j--){
if(list[j] > list[j+1]){
swap(list,j,j+1);
flag = true;
}
}
}
}
public static void main(String[] args) {
int list0[] = new int[]{3,2,5,6,4,8,7,9,0,1};
// int list1[] = new int[]{9,8,7,6,5,4,3,2,1,0};
// int list2[] = new int[]{2,1,3,4,5,6,7,8,9};
sort01(list0);
// sort02(list0);
// sort03(list0);
print(list0);
}
}