接上一篇日志:热点排序算法思考(一)
对上一篇的算法进行了优化:
上一篇中提到的解决方法是一直维护一个排好序的二叉树,但是实际上我们并没有必要去一直维持这样一个二叉树,我们只需要知道当前序列中最边缘的节点值即可。
假设大数组总长度为N,这样整个计算最糟糕的复杂度就是O(n+n*logk);而最好的情况,复杂度为O(n);这才是我之前的理想复杂度的方法;
该方法的实现代码如下:
void exchange(S_NODE *node1, S_NODE *node2)
{
int temp;
temp = node1->value;
node1->value = node2->value;
node2->value = temp;
}
void input_sort(S_NODE *node)
{
if (node==NULL) {
return;
}
if (node->m_leftNode && node->m_rightNode) {
if (node->m_leftNode->valu