把0放到数组尾部应该是双指针,一个头一个尾同时往中间走,如果a[i] == 0 并且a[j] != 0 就交换
如果前面等于0后面也等于0,j--,如果前面不等于0,无论后面值为多少,前面的i就++
#include<iostream>
using namespace std;
const int N = 100010;
int a[N];
int main(){
    int n;
    cin >> n;
    for(int i = 0;i < n;i++ )
        cin >> a[i];
    int i = 0,j = n - 1;
    while(i < j){
        if(a[i] == 0){
            if(a[j] != 0){
                swap(a[i],a[j]);
                i++;
                j--;
            }
            if(a[j] == 0)
                j--;
        }
        if(a[i] != 0) i++;
    }
    for(int i = 0;i < n;i++ )cout << a[i] << " ";
    
}