ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 将数组中的 0 和 1 分开 > 原文: [https://www.geeksforgeeks.org/segregate-0s-and-1s-in-an-array-by-traversing-array-once/](https://www.geeksforgeeks.org/segregate-0s-and-1s-in-an-array-by-traversing-array-once/) 系统会以随机顺序为您提供 0 和 1 的数组。 分隔数组左侧的 0 和右侧的 1。 遍历数组仅一次。 ``` Input array = [0, 1, 0, 1, 0, 0, 1, 1, 1, 0] Output array = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] ``` **方法 1(计数 0s 或 1s)** 感谢 Naveen 建议使用此方法。 1)计算 0 的数量。 令数量为`C`。 2)一旦有了计数,就可以在数组的`C`位置的开头放置 0,在其余的`n – C`位置放置 1。 **时间复杂度**: `O(n)` ## C++ ```cpp // C++ code to Segregate 0s and 1s in an array #include <bits/stdc++.h> using namespace std; // Function to segregate 0s and 1s void segregate0and1(int arr[], int n) {     int count = 0; // Counts the no of zeros in arr     for (int i = 0; i < n; i++) {         if (arr[i] == 0)             count++;     }     // Loop fills the arr with 0 until count     for (int i = 0; i < count; i++)         arr[i] = 0;     // Loop fills remaining arr space with 1     for (int i = count; i < n; i++)         arr[i] = 1; } // Function to print segregated array void print(int arr[], int n) {     cout << "Array after segregation is ";     for (int i = 0; i < n; i++)         cout << arr[i] << " "; } // Driver function int main() {     int arr[] = { 0, 1, 0, 1, 1, 1 };     int n = sizeof(arr) / sizeof(arr[0]);     segregate0and1(arr, n);     print(arr, n);     return 0; } // This code is contributed by Sahil_Bansall ```