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


public class Demo1 { public static void main(String[] args) { int[] a = { 0, 0, 0, 11, 23 }; int[] b = { 0, 0, 0, 11, 23 }; int[] c = { 0, 0, 0, 11, 23 }; System.out.println("******方法一*******"); sortZero1(a); for (int n : a)// 增強for循环,遍历数组a的每一个元素依次赋值给n System.out.print(n + " "); System.out.println(); System.out.println("******方法二*******"); sortZero2(b); for (int n : b) System.out.print(n + " "); System.out.println(); System.out.println("******方法三*******"); sortZero3(c); for (int n : c) System.out.print(n + " "); } public static void sortZero1(int a[]) {//方法一 /* * 思路:1.从数组中找到第一个元素值为0的下标,再找从该0元素之后的第一个不为0的元素下标,在进行交换 *如:0,0,0,5,6 第一个0与5交换 * *2.依次进行1操作,直到0后不再有非0值停止 */ for (int i = 0; i < a.length; i++) { if (a[i] == 0) { int b = i + 1; //从当前i之后开始查询第一个不为0的元素 while (b < a.length) { if (a[b] != 0) { a[i] = a[b]; a[b] = 0; break; //交换完毕跳出while循环 } else b++; } if (b == a.length)//0后不再有非0值结束循环 break; } } } public static void sortZero2(int a[]) { int count = 0; //记录0的个数 int j; for (int i = 0; i < a.length - count; i++) {//0后移之后判断长度相应的减去0的个数if (a[i] == 0) { count++; for (j = i; j < a.length - 1; j++) {//查到0元素后,0之后元素依次进行前移 a[j] = a[j + 1]; } a[j] = 0; //前移后最后值赋0 i--; //前移后再对当前的i重新判断是否为0,防止有连续0出现 } } }public static void sortZero3(int a[]) {//同学写的 很优秀 自行体会 for (int i = 0; i < a.length - 1; i++){ for (int j = i; j < a.length - 1; j++) if(a[i]==0]){ a[i]=a[i]^a[j+1]; a[j+1]=a[i]^a[j+1]; a[i]=a[i]^a[j+1]; }} } }



    推荐阅读