码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序

时间:2019-12-21 20:55:52      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:大于   cst   end   ++   str   using   har   amp   --   

#include<iostream>
#include<cstdlib>
#include<stack>
#include<string>
#include<vector>

using namespace std;

void HeapAdjust(vector<int> &A, int beginIndex, int endIndex){
    int temp = A[beginIndex];
    int j = 2 * beginIndex;

    for(; j <= endIndex; j = j * 2){
        //在左右子节点中选一个更大的节点
        if(j < endIndex && A[j] < A[j+1]) j++;
        //比较子节点和父节点
        //如果父节点大于子节点break
        if(temp >= A[j]) break;
        //如果父节点小于子节点,将子节点的值赋给父节点
        A[beginIndex] = A[j];
        beginIndex = j;//对变动的子树进行进一步调整
    }
    A[beginIndex] = temp;
}

void HeapSort(vector<int> &A,int len){
    //构建一棵最大堆二叉树
    //从最后一个有子节点的数开始构造
    for(int i = (len-1)/2; i >= 0; i--){
        HeapAdjust(A,i,len-1);
    }

    //将最大堆的堆顶与最后一个位置交换,继续调整堆
    for(int i = len - 1; i > 0; i--){
        swap(A[0],A[i]);
        HeapAdjust(A,0,i-1);
    }
}


int main()
{
    vector<int> A = {5,2,7,3,6,1,4,8};

    HeapSort(A,A.size());

    for(int i = 0; i < A.size(); i++){
        cout<<A[i]<<" ";
    }

}

   

堆排序

标签:大于   cst   end   ++   str   using   har   amp   --   

原文地址:https://www.cnblogs.com/buaaZhhx/p/12077856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!