1 #include<iostream>
2 #include<cstdlib>
3 using namespace std;
4 #include<algorithm>
5 #include<vector>
6 #include<functional>
7 #include<ctime>
8
9
10 /*
11 5.3 常用排序算法
12
13 sort //对容器内元素进行排序
14 random_shuffle //洗牌 指定范围内的元素随机调整次序
15 merge // 容器元素合并,并存储到另一容器中
16 reverse // 反转指定范围的元素
17
18 5.3.1 sort
19 对容器内元素进行排序
20 sort(iterator beg, iterator end, _Pred);
21 // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
22 // beg 开始迭代器
23 // end 结束迭代器
24 // _Pred 谓词
25 sort属于开发中最常用的算法之一,需熟练掌握
26
27 5.3.2 random_shuffle
28 洗牌 指定范围内的元素随机调整次序
29 random_shuffle(iterator beg, iterator end);
30 // 指定范围内的元素随机调整次序
31 // beg 开始迭代器
32 // end 结束迭代器
33 random_shuffle洗牌算法比较实用,使用时记得加随机数种子
34 */
35
36
37 void myprint(const vector<int> & v)
38 {
39 for(vector<int>::const_iterator cit=v.begin(); cit!=v.end(); cit++)
40 {
41 cout << *cit << " ";
42 }
43 cout << endl;
44 }
45
46
47 void myprint1(int val)
48 {
49 cout << val << " ";
50 }
51
52
53 void test531()
54 {
55 vector<int> v;
56
57 v.push_back(10);
58 v.push_back(30);
59 v.push_back(50);
60 v.push_back(20);
61 v.push_back(40);
62
63 sort(v.begin(), v.end()); //默认升序
64
65 myprint(v);
66
67 for_each(v.begin(), v.end(), myprint1);
68 cout << endl;
69
70 //降序
71 sort(v.begin(), v.end(), greater<int>()); //利用内建函数对象
72 for_each(v.begin(), v.end(), myprint1);
73 cout << endl;
74 }
75
76
77 void test532()
78 {
79 srand((unsigned int)time(NULL)); //真随机,防止每次打乱的结果都一样
80
81 vector<int> v;
82 for(int i=0; i<10; i++)
83 {
84 v.push_back(i);
85 }
86
87 cout << "打乱前:" << endl;
88 for_each(v.begin(), v.end(), myprint1);
89 cout << endl;
90
91 random_shuffle(v.begin(), v.end());
92
93 cout << "打乱后:" << endl;
94 for_each(v.begin(), v.end(), myprint1);
95 cout << endl;
96 }
97
98
99 int main()
100 {
101 test531();
102 test532();
103
104 system("pause");
105 return 0;
106 }
