移动零:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保 持非零元素的相对顺序。(用冒泡的思想)

示例: 输入: [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,所以不用交换
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值