当前位置: 首页 > 面试题库 >

C ++ 11 std :: sort在不同的STL实现中使用哪些算法?

卢永寿
2023-03-14
问题内容

C 11标准保证 在最坏的情况下 std::sort具有O(n
logn)复杂度
。这与C
98/03中的
平均情况* 保证不同,后者可以通过Quicksort(可能与小n的插入排序结合使用)实现,后者在最坏的情况下(对于某些特定情况,具有O(n ^
2))输入,例如已排序的输入)。
***std::sort

std::sort不同的STL库中的实现是否有任何更改?如何std::sort在不同的STL中实现C ++ 11 ?


问题答案:

浏览 libstdc
++

libc ++ 的在线资源,可以看到这两个库都使用了intro-
sort主循环中的全部已知排序算法:

对于std::sort,有一个辅助例程insertion_sort(一种O(N^2)算法,但具有良好的缩放常数,使其对于小的序列具有竞争力),以及一些特殊的大小写,分别用于0、1、2和3个元素的子序列。

对于std::partial_sort,这两个库都使用heap_sortO(N log N)通常)版本,因为该方法具有很好的不变性,可以保留排序后的子序列(通常具有较大的缩放常数,从而使其在进行完整排序时更加昂贵)。

对于std::nth_element,有一个辅助例程selection_sort(再次使用O(N ^
2)算法,该算法具有良好的sclaing常数,使其对于小的序列具有竞争力)。对于常规排序insertion_sort通常占主导selection_sort,但是对于nth_element具有最小元素的不变性则与的行为完全匹配selection_sort



 类似资料:
  • C 11标准保证在最坏的情况下,具有O(n logn)复杂性。这与C 98/03中的平均情况保证不同,在C 98/03中,可以通过快速排序(可能与小n的插入排序相结合)实现,在最坏的情况下(对于某些特定的输入,例如排序输入),插入排序有O(n^2)。 在不同的STL库中,实现是否有任何变化?如何在不同的STL中实现C 11的?

  • 本文向大家介绍在STL中实现Vector的C ++程序,包括了在STL中实现Vector的C ++程序的使用技巧和注意事项,需要的朋友参考一下 向量具有在插入或删除元素时自动像动态数组一样自动调整大小的能力,容器可以自动处理其存储。矢量元素放置在连续的存储中,以便可以使用迭代器对其进行访问和遍历。可以在向量的开头,中间或结尾插入或删除数据。 功能和说明: 范例程式码 输出结果

  • 本文向大家介绍在STL中实现集的C ++程序,包括了在STL中实现集的C ++程序的使用技巧和注意事项,需要的朋友参考一下 Set是抽象数据类型,其中每个元素都必须是唯一的,因为元素的值可以标识它。一旦将元素的值添加到集合中,就无法对其进行修改,但是可以删除并添加该元素的修改后的值。 功能和说明: 范例程式码 输出结果

  • 本文向大家介绍在STL中实现Priority_queue的C ++程序,包括了在STL中实现Priority_queue的C ++程序的使用技巧和注意事项,需要的朋友参考一下 优先级队列是一种容器适配器,其中队列的第一个元素是队列中所有元素中最大的。元素在优先级队列中的顺序也不减。在优先级队列中,高优先级的元素在低优先级的元素之前得到服务。 功能和说明: 范例程式码 输出结果

  • 本文向大家介绍在STL中实现Forward_List的C ++程序,包括了在STL中实现Forward_List的C ++程序的使用技巧和注意事项,需要的朋友参考一下 STL中的转发列表实现单链列表。列表与forward_list不同,该列表跟踪下一个和上一个元素。 前向列表仅跟踪下一个元素的位置,因此增加了存储每个元素所需的存储空间。forward_list的缺点是单个元素无法直接访问,并且不能

  • 本文向大家介绍C ++程序在STL中实现Prev_Permutataion,包括了C ++程序在STL中实现Prev_Permutataion的使用技巧和注意事项,需要的朋友参考一下 STL中的Prev_permutation用于将范围[first,last]中的元素重新排列到先前的字典上较小的排列。排列是N的每一个!元素可以采取的可能安排。这是一个在STL中实现Prev_permutation的

  • 本文向大家介绍C ++程序在STL中实现Next_Permutation,包括了C ++程序在STL中实现Next_Permutation的使用技巧和注意事项,需要的朋友参考一下 STL中的next_permutation用于将[first,last]范围内的元素重新排列到下一个字典上更大的排列。排列是N的每一个!元素可以采取的可能安排。这是C ++程序,用于在STL中实现Next_permuta

  • 本文向大家介绍C ++程序在STL中实现堆栈,包括了C ++程序在STL中实现堆栈的使用技巧和注意事项,需要的朋友参考一下 堆栈是遵循特定操作顺序的线性数据结构。订单可以是FILO(先进先出)或LIFO(先进先出) 算法 范例程式码 输出结果