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