• 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 }
  • 相关阅读:
    Android读书笔记三
    Android读书笔记二
    Android读书笔记一
    cpp plugin system
    houdini已放弃2
    ssh-keygen
    linux library
    software with plugin
    houdini已放弃
    C++ template
  • 原文地址:https://www.cnblogs.com/Long-w/p/9831485.html
Copyright © 2020-2023  润新知