首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

C++直接排序算法问题

发布网友 发布时间:2022-04-22 09:14

我来回答

1个回答

热心网友 时间:2022-05-23 05:32

快速排序实际上就是分治之排序实际上是将复杂排序划分为多个子排序,对不同的子排序利用不同的算法以提高效率.数量大的采用二分排序,如果雷同元素多,可能会导致二分区间划不出来,则采用堆排序.前两种都是利用堆栈排序,开销还是比较大的但效率高.数量较小的直接利用插入排序即可.
对于快速排序,stl有了较好的实现,不必重复写,我大概注释了一下,给你参考参考
template
inline
//
stl
内部的排序函数实现
void
_sort(_ranit
_first,
_ranit
_last,
_diff
_ideal,
_pr
_pred)
{
//
_count是容器的尺寸,首先根据容器的尺寸选择算法
_diff
_count;
for
(;
_isort_max
<
(_count
=
_last
-
_first)
&&
0
<
_ideal;
)
{
//
二分排序,取中间下标,左边是小于中间值的,右边是大于中间值的
//
不断的递归,直到无法再划分这样的大,小区间.
pair<_ranit,
_ranit>
_mid
=
std::_unguarded_partition(_first,
_last,
_pred);
_ideal
/=
2,
_ideal
+=
_ideal
/
2;
if
(_mid.first
-
_first
<
_last
-
_mid.second)
{
//
对左侧的区间递归
std::_sort(_first,
_mid.first,
_ideal,
_pred);
_first
=
_mid.second;
}
else
{
//
对右侧的区间递归
std::_sort(_mid.second,
_last,
_ideal,
_pred);
_last
=
_mid.first;
}
}
//
如果雷同元素多,可能会导致划分失败,这个时候采用堆排序
if
(_isort_max
<
_count)
{
//
heap
sort
if
too
many
divisions
std::make_heap(_first,
_last,
_pred);
std::sort_heap(_first,
_last,
_pred);
}
else
if
(1
<
_count)
//
元素较少的情况插入排序
std::_insertion_sort(_first,
_last,
_pred);
//
small
}
#include
#include
void
main()
{
int
arrint[]
=
{1,
2,
2,
3,
4,
5,
3,
4};
std::sort(arrint,
arrint
+
sizeof(arrint)/sizeof(arrint[0]));
std::copy(arrint,
arrint
+
sizeof(arrint)/sizeof(arrint[0]),
std::ostream_iterator
(std::cout,
"
"));
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com