/******排序性算法 根据实用性和常用性依次为
sort() 对所有元素进行排序, 内部采用quicksort算法, 保证了良好的平均性能.
stable_sort() 对所有元素进行排序 ,并保持相等元素间的相对次序
partial_sort() 排序, 直到前n个元素就位
partial_sort_copy() 排序, 直到前n个元素就位, 结果复制于他处
partition() 改变元素次序,使符合某准则的元素放在前面,
从字面意思可以理解为为一个区间分区
stable_partition() 之于partition() 相当于stable_sort()之于sort()
----------------------------------------------------------------------------
下面这四个算法经常在同一个程序中一块出现:
make_heap() 将一个区间转换成一个heap
push_heap() 将元素加入一个heap
pop_heap() 从heap移除一个元素
sort_heap() 对heap进行排序, 此后就不再是一个heap了
这个排序算法主要用于 找出区间中最大的几个数,并且不对这几个数的顺序要求
----------------------------------------------------------------------------
nth_element() 根据第n个位置进行排序, 使得第n位置的元素就位,
即:所有n位置之前的元素 都<=它,所有n位置之后的元素都>=它.
注:nth_elemnt() 划分后区间并不是十分明确,因为采用此算法后,n位置 左区间
可能会含有与n位置元素相等的元素, 右区间也是一样.
-------上述只列出了函数名,并未给出参数,有需要的可下载个MSDN查询参数-----------
- /////****function : Sorting Algorithms Examples
- #include<iostream>
- #include<vector>
- #include<algorithm>
- using namespace std;
- void print(vector<int>& vec)
- {
- for(vector<int>::iterator iter=vec.begin(); iter != vec.end(); ++iter)
- cout<<*iter<<" ";
- cout<<endl;
- }
- int Rand()
- {
- return rand()%100 + 1;
- }
- bool Comp(int elem1, int elem2)
- {
- return elem1 < elem2;
- }
- bool partition_op(int elem, int newRule=54)
- {/* 划分区间的规则是小于等于54的在左边, 大于等于54的在右边 */
- return elem <= newRule;
- }
- int main()
- {
- vector<int> svec(10);
- vector<int>::iterator iter1 = svec.begin(), iter2 = svec.end();
- /********sort********/
- generate(iter1, iter2, Rand);
- cout<<"before sorted:";
- print(svec);
- sort(iter1, iter2, Comp);
- cout<<"after sorted: ";
- print(svec);
- cout<<"----------------------"<<endl;
- /******partial_sort()*******/
- vector<int>::iterator sortEnd = iter1 + 4;
- generate(iter1, iter2, Rand);
- cout<<"before partial_sorted:";
- print(svec);
- partial_sort(iter1, sortEnd, iter2);
- cout<<"after partial_sorted:";
- print(svec);
- cout<<"----------------------"<<endl;
- /********partition*********/
- generate(iter1, iter2, Rand);
- cout<<"before partition:";
- print(svec);
- vector<int>::iterator it = partition(iter1, iter2, partition_op);
- cout<<"The first position which is not success for rule is:"<<*it<<endl;
- cout<<"after partition:";
- print(svec);
- cout<<"----------------------"<<endl;
- /********sort_heap**************/
- generate(iter1, iter2, Rand);
- cout<<"before make_heap:";
- print(svec);
- make_heap(iter1, iter2);
- cout<<"after make_heap:";
- print(svec);
- cout<<"----------------------"<<endl;
- cout<<"before sort_heap:";
- print(svec);
- cout<<"after sort_heap:";
- sort_heap(iter1, iter2);
- print(svec);
- system("pause");
- return 0;
- }
运行参考结果为:(由于rand的作用,运行测试数据会有所不同)