31 8 53 61 13 9
从小到大,升序,俩数比较大的排后面
相邻俩个数据俩俩作比较,数字大的排后面
数组下标数据为0的数据与数组下标为1的数据作比较,比较完就数组下标为1的数据与数组下标为2的数据作比较,以此类推,第一遍比较完得到最大值排在最后面,每一遍比较都得到比较得数据中得最大值。
第i遍比较 31 8 53 61 13 9 需比较次数j
0 31 8 53 61 13 9 5
1 8 31 53 13 9 61 4
2 8 31 13 9 53 61 3
3 8 13 9 31 53 61 2
4 8 9 13 31 53 61 1
不需比较了 8 9 13 31 53 61
红色代表每一遍比较后得到的最大值已经在正确的位置上,下一次比较只需要比较到红色前面那个数字即可,不需要比较是因为第4次比较完已经有最大的5个数字排好在最后的位置,那么剩下的那个数字就是最小的一个排在最前的位置。
代码思路:
设计俩个循环,外层循环控制第i遍比较,数组长度(arr.length)=6,比较遍数从0开始的,所以i<arr.length-1。内层循环控制需要比较的次数,观察上面i、j对比得j<arr.length-1-i。
内层循环里面得语句是俩个数计较的,arr[j]>arr[j+1]则互换
最后循环外用数组遍历打印语句输出
public class Test16 {
public static void main(String [] args){
//冒泡排序:相邻的数据俩俩作比较。
int arr[]={5,1,9,7,6,8,3,2,4};
//外层循环控制比较遍数
for(int i=0;i<arr.length-1;i++){
//内层循环控制第i遍需要比较的次数
for(int j=0;j<arr.length-1-i;j++){
//相邻的俩个数据作比较
if(arr[j]>arr[j+1]){
int a=arr[j];
arr[j]=arr[j+1];
arr[j+1]=a;
}
}
}
for(int b:arr){
System.out.println(b);
}
}
}