// 采用最小代价将 0 移到末尾 void RightZero(int* a, int size) { int flag = -1; for (int i=0; i<size; i++) { // 确定第一个0 if (a[i] == 0 && flag == -1) { flag = i; } if (a[i] != 0 && flag != -1) { int tmp = a[i]; a[i] = a[flag]; a[flag] = tmp; if (a[flag+1] == 0) { flag += 1; } else flag = i; } } }