码迷,mamicode.com
首页 > 编程语言 > 详细

14、【常见算法】数组分组排序

时间:2018-10-22 20:32:32      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:扫描   col   ==   end   pre   直接   using   iostream   font   

问题:给定一个包含红,白,蓝且长度为 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] << "\t";
36     }
37     cout << endl;
38     sortColors(arr, 10);
39     for(int i = 0; i < 10; i++)
40     {
41         cout << arr[i] << "\t";
42     }
43     cout << endl;
44     return 0;
45 }

 

14、【常见算法】数组分组排序

标签:扫描   col   ==   end   pre   直接   using   iostream   font   

原文地址:https://www.cnblogs.com/Long-w/p/9831485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!