堆和堆排序

堆:

堆是具有下列性质的完全二叉树
每个节点的值都大于或等于左右孩子节点的值,称为大顶堆
每个节点的值都小于或等于左右孩子节点的值,称为小顶堆

堆排序

#include <iostream>
using namespace std;
/******************堆排序************************/
void AdjustHeap(int arr[], int s, int m) {
    int temp = arr[s];
    for(int j = 2*s+1; j <= m; j *= 2 + 1) {
        if(j < m && arr[j] < arr[j+1])
            j++;
        if(temp > arr[j])
            break;
        arr[s] = arr[j];
        s = j;
    }
    arr[s] = temp;
}
void HeapSort(int arr[], int length) {
    if(length <= 0)
        return;
    for(int i = length/2 -1; i >= 0; --i) {
        AdjustHeap(arr, i, length-1);
    }
    for(int i = length -1; i > 0; --i) {
        swap(arr[0], arr[i]);
        AdjustHeap(arr, 0, i-1);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 堆的简介 堆排序是一种复杂度为Nlog(N)的排序算法。介绍堆排序之前先讲一讲什么是堆。这里介绍的是数据结构中的二...
    渭城一场雨阅读 2,472评论 0 2
  • 优先队列 优先队列是什么:与常见的队列不同的是,优先队列并不遵循“先进先出”的原则,反而是根据优先级来确定是否先出...
    PcDack阅读 3,561评论 2 5
  • 一、基本知识 初始化堆:按照完全二叉树的结构,从上到下、从左到右依次放入元素,然后可以认为所有的叶子结点已经符合大...
    鬼谷神奇阅读 2,555评论 0 0
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 10,630评论 0 12
  • 从前 这个地方 曾经站着你 挥着手 中的思念 现在 我站在了这个 曾经站着你 的地方 寻找着那 迷失的思念 201...
    MK袁景文阅读 1,594评论 0 0

友情链接更多精彩内容