冒泡排序
冒泡排序是通过一个for循环嵌套另一个for循环实现数组升序或降序排序;
外部for循环的作用为:保证每个数都会与其他数进行比较,所以循环次数为数组大小-1,因为最后一个数不需要比较,前面所有数都与他比较过了;
内部for循环的作用为:实现当前数与下一个数进行比较判断是否进行位置交换,因为最大数会通过这个一次循环直接沉底,所以可以减去i,i为大数沉底的个数;
在内部for循环中,通过比较当前数与下一位数,实现大数不断沉底或小数不断上升的过程,优化方案如减少内部for循环次数,根据降序或升序对判断条件进行调整减去i比较次数,因为在前一次j次数循环中大数已经沉底,比较完成,不需要在再进行比较
int a[] = {80,99,101,1,76,5,68,79};
for(int i = 0;i<a.length-1;i++) {
for(int j=0;j<a.length-i-1;j++) {
if(a[j]>a[j+1]) {
int c = a[j+1];
a[j+1]=a[j];
a[j]=c;
}
}
}
可以通过在外部for循环后设置条件,查看每次循环具体效果,便于理解,如下:
int a[] = {80,99,101,1,76,5,68,79};
for(int i = 0;i<a.length-1;i++) {
for(int j=0;j<a.length-i-1;j++) {
if(a[j]>a[j+1]) {
int c = a[j+1];
a[j+1]=a[j];
a[j]=c;
}
if(i==1) {
for(int d = 0;d<a.length;d++) {
System.out.print(a[d]+" ");
}
System.out.println();
}
}
}
}