<<Effective STL>> 条款31 容器排序笔记
来源:互联网 发布:mac硬盘新建文件夹 编辑:程序博客网 时间:2024/06/05 05:52
标准库提供了关于排序的很多函数,比较常用的有:
sort(...); // 内部调用了qsort和冒泡排序,自动根据数量多少优化。
partial_sort(...);// 对前n个元素进行排序,所以叫局部排序
stable_sort(...);// 其他的函数不保证稳定排序,即两个元素一样,排序之后这个函数可以保证排序之后还是一样的顺序。
partition(...);// 根据条件把符合条件的元素放到最前面
nth_element(...); // 提取前n个元素到前面来,但不对其排序。
在实际项目开发过程中,可根据需要选择最优排序算法。
测试源码如下。
void sort_demo (){ srand ( ( (unsigned int)time ( NULL ) ) ); vector <int > v; for ( int i = 0; i < 100; i++ ) { v.push_back ( rand () % 100 ); } cout << "未排序" << endl; for each ( auto i in v ) { cout << i << '\t'; } cout << endl; auto v1 = v; partial_sort ( v1.begin (), v1.begin () + 25, v1.end () ); //前25个元素排序 cout << "前25个元素排序" << endl; for each ( auto i in v1 ) { cout << i << '\t'; } cout << endl; auto v2 = v; stable_sort ( v2.begin (), v2.end () ); cout << "stable_sort稳定排序" << endl; for each ( auto i in v2 ) { cout << i << '\t'; } cout << endl; auto v3 = v; // nth_element(v.begin(),v.begin()+5,v.end()); nth_element ( v3.begin (), v3.begin () + 75, v3.end (), [] ( const int &lhs, const int &rhs )-> bool { return lhs < rhs; } ); cout << "nth_element提取前75个元素到begin,但内部不排序" << endl; for each ( auto i in v ) { cout << i << '\t'; } cout << endl; auto v4 = v; partition ( v4.begin (), v4.end (), [] ( const int & value )->bool { return value > 80; } ); cout << "partition排序:将符合要求的元素提取到前面来" << endl; for each ( auto i in v ) { cout << i << '\t'; } cout << endl; sort ( v.begin (), v.end () ); // 全排序 cout << "sort全排序" << endl; for each ( auto i in v ) { cout << i << '\t'; } cout << endl; system ( "pause" ); return 0;}
输出结果:
未排序
80 66 96 82 60 81 94 69 54 67
43 94 94 23 13 49 22 4 45 12
85 34 78 43 37 77 39 43 8 90
49 53 87 42 95 70 37 66 20 87
86 41 18 94 99 16 96 11 93 35
15 84 60 62 45 69 31 99 14 85
73 47 34 37 29 79 66 93 45 76
69 60 99 72 87 87 61 28 33 94
72 83 48 23 35 60 7 87 61 23
46 99 51 35 73 26 30 92 83 7
前25个元素排序
4 7 7 8 11 12 13 14 15 16
18 20 22 23 23 23 26 28 29 30
31 33 34 34 35 96 94 94 94 90
85 82 87 81 95 80 78 77 70 87
86 69 67 94 99 66 96 66 93 60
54 84 60 62 53 69 49 99 49 85
73 47 45 45 43 79 66 93 45 76
69 60 99 72 87 87 61 43 43 94
72 83 48 42 41 60 39 87 61 37
46 99 51 37 73 37 35 92 83 35
stable_sort稳定排序
4 7 7 8 11 12 13 14 15 16
18 20 22 23 23 23 26 28 29 30
31 33 34 34 35 35 35 37 37 37
39 41 42 43 43 43 45 45 45 46
47 48 49 49 51 53 54 60 60 60
60 61 61 62 66 66 66 67 69 69
69 70 72 72 73 73 76 77 78 79
80 81 82 83 83 84 85 85 86 87
87 87 87 87 90 92 93 93 94 94
94 94 94 95 96 96 99 99 99 99
nth_element提取前75个元素到begin,但内部不排序
80 66 96 82 60 81 94 69 54 67
43 94 94 23 13 49 22 4 45 12
85 34 78 43 37 77 39 43 8 90
49 53 87 42 95 70 37 66 20 87
86 41 18 94 99 16 96 11 93 35
15 84 60 62 45 69 31 99 14 85
73 47 34 37 29 79 66 93 45 76
69 60 99 72 87 87 61 28 33 94
72 83 48 23 35 60 7 87 61 23
46 99 51 35 73 26 30 92 83 7
partition排序:将符合要求的元素提取到前面来
80 66 96 82 60 81 94 69 54 67
43 94 94 23 13 49 22 4 45 12
85 34 78 43 37 77 39 43 8 90
49 53 87 42 95 70 37 66 20 87
86 41 18 94 99 16 96 11 93 35
15 84 60 62 45 69 31 99 14 85
73 47 34 37 29 79 66 93 45 76
69 60 99 72 87 87 61 28 33 94
72 83 48 23 35 60 7 87 61 23
46 99 51 35 73 26 30 92 83 7
sort全排序
4 7 7 8 11 12 13 14 15 16
18 20 22 23 23 23 26 28 29 30
31 33 34 34 35 35 35 37 37 37
39 41 42 43 43 43 45 45 45 46
47 48 49 49 51 53 54 60 60 60
60 61 61 62 66 66 66 67 69 69
69 70 72 72 73 73 76 77 78 79
80 81 82 83 83 84 85 85 86 87
87 87 87 87 90 92 93 93 94 94
94 94 94 95 96 96 99 99 99 99
80 66 96 82 60 81 94 69 54 67
43 94 94 23 13 49 22 4 45 12
85 34 78 43 37 77 39 43 8 90
49 53 87 42 95 70 37 66 20 87
86 41 18 94 99 16 96 11 93 35
15 84 60 62 45 69 31 99 14 85
73 47 34 37 29 79 66 93 45 76
69 60 99 72 87 87 61 28 33 94
72 83 48 23 35 60 7 87 61 23
46 99 51 35 73 26 30 92 83 7
前25个元素排序
4 7 7 8 11 12 13 14 15 16
18 20 22 23 23 23 26 28 29 30
31 33 34 34 35 96 94 94 94 90
85 82 87 81 95 80 78 77 70 87
86 69 67 94 99 66 96 66 93 60
54 84 60 62 53 69 49 99 49 85
73 47 45 45 43 79 66 93 45 76
69 60 99 72 87 87 61 43 43 94
72 83 48 42 41 60 39 87 61 37
46 99 51 37 73 37 35 92 83 35
stable_sort稳定排序
4 7 7 8 11 12 13 14 15 16
18 20 22 23 23 23 26 28 29 30
31 33 34 34 35 35 35 37 37 37
39 41 42 43 43 43 45 45 45 46
47 48 49 49 51 53 54 60 60 60
60 61 61 62 66 66 66 67 69 69
69 70 72 72 73 73 76 77 78 79
80 81 82 83 83 84 85 85 86 87
87 87 87 87 90 92 93 93 94 94
94 94 94 95 96 96 99 99 99 99
nth_element提取前75个元素到begin,但内部不排序
80 66 96 82 60 81 94 69 54 67
43 94 94 23 13 49 22 4 45 12
85 34 78 43 37 77 39 43 8 90
49 53 87 42 95 70 37 66 20 87
86 41 18 94 99 16 96 11 93 35
15 84 60 62 45 69 31 99 14 85
73 47 34 37 29 79 66 93 45 76
69 60 99 72 87 87 61 28 33 94
72 83 48 23 35 60 7 87 61 23
46 99 51 35 73 26 30 92 83 7
partition排序:将符合要求的元素提取到前面来
80 66 96 82 60 81 94 69 54 67
43 94 94 23 13 49 22 4 45 12
85 34 78 43 37 77 39 43 8 90
49 53 87 42 95 70 37 66 20 87
86 41 18 94 99 16 96 11 93 35
15 84 60 62 45 69 31 99 14 85
73 47 34 37 29 79 66 93 45 76
69 60 99 72 87 87 61 28 33 94
72 83 48 23 35 60 7 87 61 23
46 99 51 35 73 26 30 92 83 7
sort全排序
4 7 7 8 11 12 13 14 15 16
18 20 22 23 23 23 26 28 29 30
31 33 34 34 35 35 35 37 37 37
39 41 42 43 43 43 45 45 45 46
47 48 49 49 51 53 54 60 60 60
60 61 61 62 66 66 66 67 69 69
69 70 72 72 73 73 76 77 78 79
80 81 82 83 83 84 85 85 86 87
87 87 87 87 90 92 93 93 94 94
94 94 94 95 96 96 99 99 99 99
0 0
- <<Effective STL>> 条款31 容器排序笔记
- Effective STL学习笔记-条款31
- Effective STL 条款31
- Effective STL条款31: 理解你的排序操作
- Effective STL条款31: 理解你的排序操作
- Effective STL条款31 理解你的排序操作
- 【Effective STL】条款1-5学习笔记
- 【Effective STL】条款6-12学习笔记
- 【Effective STL】条款13-18学习笔记
- Effective STL学习笔记-条款1
- Effective STL学习笔记-条款7
- Effective STL学习笔记-条款8-9
- Effective STL学习笔记-条款13|14
- Effective STL学习笔记-条款19
- Effective STL学习笔记-条款20
- Effective STL学习笔记-条款21
- Effective STL学习笔记-条款23
- Effective STL学习笔记-条款24
- 黑马程序员-Java基础知识5(部分笔记总结)
- use the isrsupc Program for search
- Mac下cocos2dx-3.0打包Android时,提示"SimpleAudioEngine.h"not found的解决方法
- C语言指针的初始化和赋值
- Ubuntu 下远程桌面rdesktop的安装及配置
- <<Effective STL>> 条款31 容器排序笔记
- C++编程思想笔记(2)
- 人脸识别效果好的几篇文章
- SQL 关键字AS详解
- 断言 assert()
- c# 制作简单的登录验证窗体
- opensuse
- 调试js 试用火狐的firebug
- 关于淘汰85%面试者的百度开发者面试题