首页 > 编程语言 > 详细

经典的堆排序

时间:2020-04-10 09:08:47      阅读:91      评论:0      收藏:0      [点我收藏+]
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void heapAdjust(vector<int>&H, int st, int end)
{
    int tmp;
    tmp = H[st];
    int j;
    for (j = 2 * st; j <= end; j++)
    {
        if (j<end&&H[j] < H[j + 1])//这里切记防止越界
        {
            j++;
        }
        if (tmp>=H[j])//st元素位置合法
        {
            break;
        }
        else
        {
            H[st] = H[j];
            st = j;
        }
    }
    H[st] = tmp;//没有子节点的话肯定合法
}
void heapSort(vector<int>&H)
{
    int i;
    int len = H.size();
    for (i = len / 2; i >= 0; i--)
    {
        heapAdjust(H, i, len - 1);
    }
    for (i = len - 1; i >= 0; i--)
    {
        swap(H[i], H[0]);
        heapAdjust(H, 0, i - 1);
    }
}
int main()
{
    vector<int>vt;
    //vt.push_back(1);
    //vt.push_back(5);
    //vt.push_back(2);
    //vt.push_back(9);
    //vt.push_back(7);
    int i;
    for (i = 100; i >= 0; i--)
    {
        vt.push_back(i);
    }
    heapSort(vt);
    for (i = 0; i < vt.size(); i++)
    {
        cout << vt[i]<< ;
    }
}

 

经典的堆排序

原文:https://www.cnblogs.com/legendcong/p/12670789.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!