一步一步看懂冒泡算法
实现逻辑写在代码注释中,就不赘述了。看懂请关注,谢谢。
import java.util.Arrays;
public class test {
public static void main(String args[]){
int[] a = {21,45,2,5,12,64,35,23,16};
System.out.println(Arrays.toString(a));
//int[] a = new int[]{21,45,2,5,12,64,35,23,16}
//循环一次,排出最大的数,循环第二次,排出第二大的数,所以循环次数取决了数组长度。
for (int j = 0;j<a.length-1;j++){
//循环一次,对比一对数,循环的次数,取决于需要对比数的对数
for (int i=0;i<a.length-1-j;i++){
if(a[i]>a[i+1]){
int temp = a[i+1];
a[i+1] = a[i];
a[i] = temp;
}
}
}
System.out.println(Arrays.toString(a));
}
/**
*临近的两个元素进行比较,然后互换顺序,内层一个循环下来,最大的数排到了最后,最大的一个一个的冒到最后,像冒泡泡一样。
*/
/**
* j=0,i<a.length-1-j=8,i最大到7
* */
//i=0;a[0]<a[1];保持不变后{21,45,2,5,12,64,35,23,16}
//i=1;a[1]>a[2];交换位置后{21,2,45,5,12,64,35,23,16}
//i=2;a[2]>a[3];交换位置后{21,2,5,45,12,64,35,23,16}
//i=3;a[3]>a[4];交换位置后{21,2,5,12,45,64,35,23,16}
//i=4;a[4]<a[5];保持不变后{21,2,5,12,45,64,35,23,16}
//i=5;a[5]>a[6];交换位置后{21,2,5,12,45,35,64,23,16}
//i=6;a[6]>a[7];交换位置后{21,2,5,12,45,35,23,64,16}
//i=7;a[7]>a[6];交换位置后{21,2,5,12,45,35,23,16,64}
/**
* j=1,i<a.length-1-j=7,i最大到6
* */
//i=0;a[0]>a[1];交换位置后{2,21,5,12,45,35,23,16,64}
//i=1;a[1]>a[2];交换位置后{2,5,21,12,45,35,23,16,64}
//i=2;a[2]>a[3];交换位置后{2,5,12,21,45,35,23,16,64}
//i=3;a[3]<a[4];保持不变后{2,5,12,21,45,35,23,16,64}
//i=4;a[4]>a[5];交换位置后{2,5,12,21,35,45,23,16,64}
//i=5;a[5]>a[6];交换位置后{2,5,12,21,35,23,45,16,64}
//i=6;a[6]>a[7];交换位置后{2,5,12,21,35,23,16,45,64}
/**
* j=2,i<a.length-1-j=6,i最大到5
* */
//i=0;a[0]<a[1];保持不变后{2,5,12,21,35,23,16,45,64}
//i=1;a[1]<a[2];保持不变后{2,5,12,21,35,23,16,45,64}
//i=2;a[2]<a[3];保持不变后{2,5,12,21,35,23,16,45,64}
//i=3;a[3]<a[4];保持不变后{2,5,12,21,35,23,16,45,64}
//i=4;a[4]>a[5];交换位置后{2,5,12,21,23,35,16,45,64}
//i=5;a[5]>a[6];交换位置后{2,5,12,21,23,16,35,45,64}
/**
* j=3,i<a.length-1-j=5,i最大到4
* */
//i=0;a[0]<a[1];保持不变后{2,5,12,21,23,16,35,45,64}
//i=1;a[1]<a[2];保持不变后{2,5,12,21,23,16,35,45,64}
//i=2;a[2]<a[3];保持不变后{2,5,12,21,23,16,35,45,64}
//i=3;a[3]<a[4];保持不变后{2,5,12,21,23,16,35,45,64}
//i=4;a[4]>a[5];交换位置后{2,5,12,21,16,23,35,45,64}
/**
* j=4,i<a.length-1-j=4,i最大到3
* */
//i=0;a[0]<a[1];保持不变后{2,5,12,21,16,23,35,45,64}
//i=1;a[1]<a[2];保持不变后{2,5,12,21,16,23,35,45,64}
//i=2;a[2]<a[3];保持不变后{2,5,12,21,16,23,35,45,64}
//i=3;a[3]>a[4];交换位置后{2,5,12,16,21,23,35,45,64}
/**
* j=5,i<a.length-1-j=3,i最大到2
* */
//i=0;a[0]<a[1];保持不变后{2,5,12,16,21,23,35,45,64}
//i=1;a[1]<a[2];保持不变后{2,5,12,16,21,23,35,45,64}
//i=2;a[2]<a[3];保持不变后{2,5,12,16,21,23,35,45,64}
/**
* j=6,i<a.length-1-j=2,i最大到1
* */
//i=0;a[0]<a[1];保持不变后{2,5,12,16,21,23,35,45,64}
//i=1;a[1]<a[2];保持不变后{2,5,12,16,21,23,35,45,64}
/**
* j=7,i<a.length-1-j=1,i最大到0,排序完成!!!
* */
//i=0;a[0]<a[1];保持不变后{2,5,12,16,21,23,35,45,64}
}