堆排序

堆排序:

以下内容是我根据其他资料和博客整理写出来的堆排序(降序),如有问题,欢迎提出。

#include <iostream>
#include <algorithm>
using namespace std;
int a[15000];
void minheapify(int a[],int n,int i) {//维护最小堆的性质;
    int l = 2 * i;
    int r = 2 * i + 1;
    int minest;
    if (l <= n && a[l] < a[i]) minest = l;
    else minest = i;
    if (r <= n && a[r] < a[minest]) minest = r;
    if (i != minest) {
        int t = a[i];
        a[i] = a[minest];
        a[minest] = t;
        minheapify(a,n,minest);     
    }
}
void buildminheap(int a[],int n) {//建立最小堆;
    for (int i = n / 2;i >= 1;--i) {
        minheapify(a,n,i);
    }
}
void heapsort(int a[],int n) {//堆排序(降序)   原理:最小堆的性质;
    buildminheap(a,n);
    int size = n;
    for (int i = n;i >= 2;--i) {
        swap(a[1],a[i]);
        size--;
        minheapify(a,size,1);   
    }
}
int main() {
    int n;
    cin >> n;
    for (int i = 1;i <= n;++i) cin >> a[i];
    heapsort(a,n);
    for (int i = 1;i <= n;++i) cout << a[i] << " ";
    cout << endl;
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O...
    尼小摩阅读 11,820评论 3 11
  • 堆排序可以做什么 首先应该弄清楚堆排序可以解决什么问题,答案是显而易见的:排序。说得通俗点儿就是对一组无序的数字进...
    Springlord888阅读 30,412评论 11 52
  • 堆排序 堆排序基本简介 1991年的计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert ...
    BlackMammba阅读 1,862评论 0 10
  • 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复...
    阿凡提说AI阅读 1,905评论 0 2
  • 完全二叉树的基本概念 可能你会疑问,为什么我们明明讲的是堆排序,怎么又扯上了二叉树的概念了,答案就是,我们这里的堆...
    再见远洋阅读 1,098评论 0 7