STL中的排序算法

1、对所有的元素进行排序

void sort(RandomAccessIterator beg,RandomAccessIterator end);                                                                                                                          void sort(RandomAccessIterator beg,RandomAccessIterator end,BinaryPredicate op);                                                                                                void stable_sort(RandomAccessIterator beg,RandomAccessIterator end);                                                                                                                void stable_sort(RandomAccessIterator beg,RandomAccessIterator end,BinaryPredicate op

有stable的函数可保证相等元素的原本相对次序在排序后保持不变(这里的相等是自己提供函数所表示的两个元素相等,比不是一模一样的元素)

    sort采用的是成熟的"快速排序算法"(目前大部分STL版本已经不是采用简单的快速排序,而是结合内插排序算法),可以保证很好的平均性能、复杂度为n*log(n),由于单纯的快速排序在理论上有最差的情况,性能很低,其算法复杂度为n*n,但目前大部分的STL版本都已经在这方面做了优化,因此你可以放心使用。stable_sort采用的是"归并排序",分派足够内存是,其算法复杂度为n*log(n), 否则其复杂度为n*log(n)*log(n),其优点是会保持相等元素之间的相对位置在排序前后保持一致

    2、局部排序

void partial_sort(RandomAccessIterator beg,RandomAccessIterator sortEnd,RandomAccessIterator end);                                                       void partial_sort(RandomAccessIterator beg,RandomAccessIterator sortEnd,RandomAccessIterator end,BinaryPredicate op); 

采用的堆排序(heapsort),它在任何情况下的复杂度都是n*log(n). 它是对[ben,end)内的元素排序,使区间[ben,sortEnd)内的元素有序;如果你希望用partial_sort来实现全排序,你只要让middle=last就可以了。

3、指定元素的排序

void nth_element(RandomAccessIterator beg,RandomAccessIterator nth,RandomAccesstIterator end);                                                          void nth_element(RandomAccessIterator beg,RandomAccessIterator nth,RandomAccesstIterator end,BinaryPredicate op);

对区间[beg end)内的元素排序,使第n个位置的的元素就位,即所有在位置n之前的元素小于它,所有在位置n之后的元素大于它。

4、"分类"算法

ForwardIterator partitial(ForwardIterator beg,ForwardIterator end,UnaryPredicate op);                                                                  ForwardIterator stable_partitial(ForwardIterator beg,ForwardIterator end,UnaryPredicate op);

partition就是把一个区间中的元素按照某个准则分成两类

 

 

 

posted @ 2012-08-19 13:43  Marinan  阅读(191)  评论(0编辑  收藏  举报