14常见算法数组分组排序

Posted long-w

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 




以上是关于14常见算法数组分组排序的主要内容,如果未能解决你的问题,请参考以下文章

常见14种经典排序算法(Java代码实现)

常见排序算法-希尔排序

14-看图理解数据结构与算法系列(希尔排序)

希尔排序算法

知了堂学习笔记java 编写几种常见排序算法3

一些常见的排序算法