用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

空心    -  云代码空间

——

堆排序

2014-05-31|1263阅||

摘要:template void Sort::HeapSort(T* array, int size) {     int lastP = size / 2;     //从最后一个有孩子的结点开始建初始堆     for(int i = lastP - 1; i >= 0; i

template 
void Sort::HeapSort(T* array, int size) 

    int lastP = size / 2; 
    //从最后一个有孩子的结点开始建初始堆 
    for(int i = lastP - 1; i >= 0; i--) 
    { 
        HeapAjust(array, i, size); 
    } 
    int j = size; 
    //将堆顶元素和无序区间的最后一个元素交换,再调整堆 
    while(j > 0) 
    { 
        Swap(array, 0, j - 1); 
        j--; 
        HeapAjust(array, 0, j); 
    } 

//调整堆 
template 
void Sort::HeapAjust(T *array, int toAjust, int size) 

    int pos = toAjust; 
    while((pos * 2 + 1) < size) 
    { 
        int lChild = pos * 2 + 1; 
        if(array[lChild] > array[pos]) 
        { 
            pos = lChild;//左孩子大 
        } 
        int rChild = lChild + 1; 
        if(rChild < size && array[rChild] > array[pos]) 
        { 
            pos = rChild;//右孩子更大 
        } 
        if(pos != toAjust) //父结点比其中一个孩子小 
        { 
            Swap(array, toAjust, pos); 
            toAjust = pos; 
        } 
        else 
        { 
            break; 
        } 
    } 
}
顶 0踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: 空心
    • 等级: 中级程序员
    • 积分: 14
    • 代码: 0 个
    • 文章: 6 篇
    • 随想: 0 条
    • 访问: 1 次
    • 关注

    人气代码

      标签

      最新提问

        站长推荐