<<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

0 0
原创粉丝点击