读书人

一个排序算法有关问题(数据结构)

发布时间: 2012-02-27 10:00:22 作者: rapoo

一个排序算法问题(数据结构)
已知某文件的记录关键字集为{50,10,50,40,45,85,80},选择一种从平均性能而言是最佳的排序方法进行排序,且说明其稳定性。

最好的方法不就是快速排序吗?这道题是不是应该分析n?

[解决办法]
要考虑 性能,
自然要分析 n ~~
[解决办法]
_Diff _Count;
for (; _ISORT_MAX < (_Count = _Last - _First) && 0 < _Ideal; )
{// divide and conquer by quicksort
pair <_RanIt, _RanIt> _Mid = _Unguarded_partition(_First, _Last);
_Ideal /= 2, _Ideal += _Ideal / 2;// allow 1.5 log2(N) divisions

if (_Mid.first - _First < _Last - _Mid.second)// loop on larger half
_Sort(_First, _Mid.first, _Ideal), _First = _Mid.second;
else
_Sort(_Mid.second, _Last, _Ideal), _Last = _Mid.first;
}

if (_ISORT_MAX < _Count)
{// heap sort if too many divisions
std::make_heap(_First, _Last);
std::sort_heap(_First, _Last);
}
else if (1 < _Count)
_Insertion_sort(_First, _Last);// small, insertion sort

针对n值的不同,首先快排,然后堆排,最后插排
基本上没有什么排序比它还快了
[解决办法]
你的数字太少,插排最适合
[解决办法]
老师当然要你写快排了,但是:下面是我抄的:

快速排序,需要
N次划分阶段,递归N次。
2(N+1)(Hn+1—1) 大约 2NlnN -0.846N次比较
(N+1)(Hn+1——5/2)/3+1/2 大约 0.333NLnN-1.346N次交换

Hn为调和级数和

插入排序 N(N-1)/4

以上均是平均性能

读书人网 >软件架构设计

热点推荐