给定含有n个元素的整型数组a,其中包括0元素和非0元素,对数组进行排序,要求: 1. 排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变 2. 不能使用额外存储空间 例子如下 输入 0, 3, 0, 2, 1, 0, 0 输出 0, 0, 0, 0, 3, 2, 1
弱逼解法:
public class MoveZero {
public static void doMove(int[] array) {
for (int i = array.length - 2; i >= 0; i--) {
if (array[i] != 0) {
int j = i + 1;
while (j <= array.length - 1) {
if (array[j] != 0) {
array[j - 1] = array[i];
array[i] = 0;
break;
}
j++;
}
if (j > array.length - 1) {
array[array.length - 1] = array[i];
array[i] = 0;
}
}
}
}
}
正解:
public class MoveZero {
public static void doMove(int[] array) {
for (int i = array.length - 1, k = array.length - 1; i >= 0; i--) {
if (array[i] != 0) {
if (array[k] == 0) {
array[k] = array[i];
array[i] = 0;
}
k--;
}
}
}
}