#include <iostream> using namespace std; void func(int *p, int n); int main() { int arr[6] = {0}; for (int &i: arr) { cin >> i; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } void func(int *p, int n) { int zerosMoved = 0; // 记录已经移动的零元素数量 for (int i = 0; i < n - zerosMoved;) { if (*(p + i) != 0) { i++; } else { for (int j = i; j < n - 1; j++) { *(p + j) = *(p + j + 1); } *(p + n - 1) = 0; zerosMoved++; // 零元素数量增加 } } }
移动法实现,但是时间复杂度是$O(n^2)$,更好的办法就是双指针。