给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
例
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
https://leetcode-cn.com/problems/move-zeroes/
问题其实可以看成稳定排序
1.冒泡排序实现
for(int i = 0; i<nums.length; i++){
for(int j = nums.length-1; j>i; j--){
if(nums[j-1] == 0){
nums[j-1] = nums[j];
nums[j] = 0;
}
}
}
2.因为0其实是可以打乱的,所以可以用类似选择排序的方法实现,选择排序需要遍历整个内循环来找出min,这里选出第一个非0的就相当于min了,可以提前终止循环。不停的将非0和第I位的0交换,0被打乱了可是非0不乱。
for(int i=0;i<nums.length;i++){
//int min = i;
for(int j=i+1;j<nums.length;j++){
if(nums[i]==0 && nums[j]!=0){//min = j选择排序的写法
nums[i]=nums[j];
nums[j]=0;
break;
}
}
}