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 }

 

posted @ 2021-05-14 09:09  yub4by  阅读(81)  评论(0编辑  收藏  举报