所谓冒泡排序,就是不断地比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。
第一步:从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换他们的位置。整个过程完成后数组中最后一个元素自然是最大值,这样就完成了第一轮比较。
第二步:除了最后一个元素,将剩余元素两两进行比较,过程与第一步相似,这样就可以将数组中第二大的数放在倒数第二个位置。
第三步:以此类推,持续对越来越少的元素进行上面的步骤,直到没有任何一个元素需要比较为止。
代码示例:
public class pao {
public static void main(String args[]) {
int[] arr= {9,8,3,5,2};
System.out.print("原数组为:");
//冒泡排序前先循环打印原数组元素
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
//进行冒泡排序
//外层循环定义需要比较的轮数(两数比较,需要比较n-1轮)
for(int i=1;i<arr.length;i++) {
System.out.print("第"+i+"轮:");
//内层循环定义第i轮需要比较的两元素
for(int j=0;j<arr.length-1;j++) {
//如果前一个元素大于后一个元素则进行交换
if(arr[j]>arr[j+1]) {
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
for(int k=0;k<arr.length;k++) {
System.out.print(arr[k]+" ");;
}
System.out.println();
}
//完成冒泡排序后循环打印数组元素
System.out.print("冒泡排序后数组为:");
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
}
运行结果:
比较过程:(数组第一个元素下标为0)
第一轮(i=1)符合j<arr.length这个条件进入内层循环
j=0
第0个元素是9,第j+1个元素是8(9>8两元素交换位置)交换后数组为{8,9,3,5,2}
比较结束j++即j=1,符合j<arr.length-1这个条件继续比较
第1个元素是9,第j+1个元素是3(9>3两元素交换位置)交换后数组为{8,3,9,5,2}
比较结束j++即j=2,符合j<arr.length-1这个条件继续比较
第2个元素是9,第j+1个元素是5(9>5两元素交换位置)交换后数组为{8,3,5,9,2}
比较结束j++即j=3,符合j<arr.length-1这个条件继续比较
第3个元素是9,第j+1个元素是2(9>2两元素交换位置)交换后数组为{8,3,5,2,9}
比较结束j++即j=4,不符合j<arr.length-1这个条件,内层循环结束回到外层循环
结束第一轮比较后数组变为{8,3,5,2,9}
结束第一轮i++,进行第二轮比较(i=2)符合j<arr.length这个条件进入内层循环
j=0
第0个元素是8,第j+1个元素是3(8>3两元素交换位置)交换后数组为{3,8,5,2,9}
比较结束j++即j=1,符合j<arr.length-1这个条件继续比较
第1个元素是8,第j+1个元素是5(8>5两元素交换位置)交换后数组为{3,5,8,2,9}
比较结束j++即j=2,符合j<arr.length-1这个条件继续比较
第2个元素是8,第j+1个元素是2(8>2两元素交换位置)交换后数组为{3,5,2,8,9}
比较结束j++即j=3,符合j<arr.length-1这个条件继续比较
第3个元素是8,第j+1个元素是9(8<9两元素不用交换位置)数组任为{3,5,2,8,9}
比较结束j++即j=4,不符合j<arr.length-1这个条件,内层循环结束回到外层循环
结束第二轮比较后数组变为{3,5,2,8,9}
结束第二轮i++,进行第三轮比较(i=3)符合j<arr.length这个条件进入内层循环
j=0
第0个元素是3,第j+1个元素是5(3<5两元素不用交换位置)数组任为{3,5,2,8,9}
比较结束j++即j=1,符合j<arr.length-1这个条件继续比较
第1个元素是5,第j+1个元素是2(5>2两元素交换位置)交换后数组为{3,2,5,8,9}
比较结束j++即j=2,符合j<arr.length-1这个条件继续比较
第2个元素是5,第j+1个元素是8(5<8两元素不用交换位置)数组任为{3,2,5,8,9}
比较结束j++即j=3,符合j<arr.length-1这个条件继续比较
第3个元素是8,第j+1个元素是9(8<9两元素不用交换位置)数组任为{3,2,5,8,9}
比较结束j++即j=4,不符合j<arr.length-1这个条件,内层循环结束回到外层循环
结束第二轮比较后数组变为{3,2,5,8,9}
结束第三轮i++,进行第四轮比较(i=4)符合j<arr.length这个条件进入内层循环
j=0
第0个元素是3,第j+1个元素是2(3>2两元素交换位置)交换后数组为{2,3,5,8,9}
比较结束j++即j=1,符合j<arr.length-1这个条件继续比较
第1个元素是3,第j+1个元素是5(3<5两元素不用交换位置)数组任为{2,3,5,8,9}
比较结束j++即j=2,符合j<arr.length-1这个条件继续比较
第2个元素是5,第j+1个元素是8(5<8两元素不用交换位置)数组任为{2,3,5,8,9}
比较结束j++即j=3,符合j<arr.length-1这个条件继续比较
第3个元素是8,第j+1个元素是9(8<9两元素不用交换位置)数组任为{2,3,5,8,9}
比较结束j++即j=4,不符合j<arr.length-1这个条件,内层循环结束回到外层循环
结束第二轮比较后数组变为{2,3,5,8,9}
结束第四轮i++,此时i=5不符合i<arr.length这个条件技术外层循环
整个循环结束