示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
用冒泡排序的思想,
外层循环还是控制比较的轮数,一共5个数,两两比较,总共要比较4轮,及length-1
内存循环控制的是每一轮的比较次数,第一轮5个数比较4次,第二轮4个数比较3次,第三轮3个数比较2次,第四轮2个数比较一次。每两个数比较一次相当于交换一次位置,就可以把值为0下标的数通过每一轮的比较换位置,换到最右边。
public static void main(String[] args) {
int[] nums = {0,1,0,3,12};
int temp;
//外层循环控制的时,比较的轮数
//外层循环次数:lenth-1
for(int i = 0 ;i<nums.length-1;i++) {
//内层循环控制的是,每轮比较的次数
//第i轮(i从0开始计算),所以比较次数为:lenth-i-1
for(int j =0;j < nums.length-i-1;j++) {
if(nums[j]==0) {
//当j下标值为0时,则一直交换到最右边
//交换
temp = nums[j+1];
nums[j+1] = nums[j];
nums[j] = temp;
//这里打印看一下这一次交换后的元素排序,更好理解
for (int n = 0; n < nums.length; n++) {
System.out.print(nums[n]+" ");
}
//换行
System.out.println();
}
}
}
System.out.println("最终交换结果为:");
for (int j = 0; j < nums.length; j++) {
System.out.print(nums[j]+" ");
}
}
第一轮:
第一次交换时1和0交换
第二次 0和0交换
第三次 0和3交换
第四次 0和12交换
第一轮结果:1 0 3 12 0
第二轮:
第一次 0和3
第二次 0和12
第二轮结果:1 3 12 0 0
第三轮不满足条件nums[j]==0,所以不用交换
第四轮也不满足条件nums[j]==0,所以不用交换