zoukankan      html  css  js  c++  java
  • 14、【常见算法】数组分组排序

    问题:给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。
    我们可以使用整数 0,1 和 2 分别代表红,白,蓝。
    例如:有数组 [1, 0, 1, 2], 直接排序成 [0, 1, 1, 2].
    要求: 不能使用sort函数, 只扫描遍历一遍数组

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void sortColors(int * arr, int n)
     5 {
     6     int left = 0, right = n - 1;
     7 
     8     int middle = 0;
     9 
    10     while(middle <= right)
    11     {
    12         if(arr[middle] == 0)
    13         {
    14             swap(arr[middle], arr[left]);
    15             left++;
    16             middle++;
    17         }
    18         else if(arr[middle] == 1)
    19         {
    20             middle++;
    21         }
    22         else
    23         {
    24             swap(arr[middle], arr[right]);
    25             right--;
    26         }
    27     }
    28 }
    29 
    30 int main()
    31 {
    32     int arr[10] = {1, 2, 1, 0, 1, 0, 2, 1, 1, 0};
    33     for(int i = 0; i < 10; i++)
    34     {
    35         cout << arr[i] << "	";
    36     }
    37     cout << endl;
    38     sortColors(arr, 10);
    39     for(int i = 0; i < 10; i++)
    40     {
    41         cout << arr[i] << "	";
    42     }
    43     cout << endl;
    44     return 0;
    45 }
  • 相关阅读:
    adjacent_diffenerce
    数值算法速食食谱
    accumulate
    平面分割
    进制转换
    奖学金
    谁考了第k名
    奇数单增序列
    病人排序
    灯的开关状态
  • 原文地址:https://www.cnblogs.com/Long-w/p/9831485.html
Copyright © 2011-2022 走看看