JAVA学习笔记之冒泡排序
public class TestProgram {
public static void main(String[] args) {
int size[]=new int[]{3,7,2,5,1};
int i,j,x;
for(i=1;i<size.length;i++) {
//这里的i可以理解为第几轮的比较,对于n个要比较的数字,只需要进行n-1次比较
for(j=0;j<size.length-i;j++) {
//j和j+1才是要比较的数组的下标,全程和size[i]没有任何关系,i只是代表第几轮的比较;
//因为每轮比较中剩余的所有数字中最大的那个数字都沉底了,所以每轮的比较都要从头开始,但是不对已沉底的数字进行操作
//数字的交换
if(size[j]<size[j+1]) {
x=size[j+1]+size[j];
size[j]=x-size[j];
size[j+1]=x-size[j];
}
}
}
for(i=0;i<size.length;i++)
{
System.out.println(size[i]);
}
}
比如对于3,7,2,5,8五个数字进行冒泡排序
总共需要进行5-1=4轮的比较
用i来表示比较的轮数
当i=1时进行第一轮的比较(用数组下标来代替)
那么比较流程就是
0 1,1 2,2 3,3 4;
共4次,此时最大的数字8已经被判断出来为最大的数字,沉到底部即下标为4的位置
当i=2时进行第二轮的比较,由于下标为4的数字已经是最大的数字,所以不对它进行操作
对剩下的4个数字进行比较找出这4个数字中最大的那个数字
比较流程是
0 1,1 2,2 3
此时剩下的4个数字中最大的那个数字7被沉到了下标为3的位置
剩下的流程可以自己推断
可以看出每次比较的第一个数字都是下标为0的那个数字,即每一轮开始比较时j=0
而且都是和自己的下一个数字进行比较,所以每次都是对j和j+1进行比较
每轮比较中j+1最大为:数组长度-当前轮数=数组长度-i
这里将每轮的i与j+1所代表的下标的最大值列出来
i=1 j+1=4
i=2 j+1=3
i=3 j+1=2
i=4 j+1=1