18.3.1【STL常用排序算法sort、random_shuffle】
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 }