当前位置: 首页 > news >正文

网站建设费用什么意思搜狗友链交换

网站建设费用什么意思,搜狗友链交换,营口房地产网站开发,免费软件下载网站入口1. 堆的定义 堆(Heap)是一种特殊的树形数据结构,它满足以下性质: 堆是一个完全二叉树。堆中每个节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。 1.1 最大堆 在…

1. 堆的定义

堆(Heap)是一种特殊的树形数据结构,它满足以下性质:

  • 堆是一个完全二叉树。
  • 堆中每个节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。

1.1 最大堆

在最大堆中,父节点的值总是大于或等于子节点的值。

    10/  \9    8/ \  / \
7  6 5  4

1.2 最小堆

在最小堆中,父节点的值总是小于或等于子节点的值。

    1/ \2   3/ \ / \
4  5 6  7

2. 堆的表示方法

堆通常使用数组来表示,因为堆是完全二叉树,可以很方便地用数组存储。

2.1 数组表示法

  • 父节点的索引为 i,则其左子节点的索引为 2*i + 1,右子节点的索引为 2*i + 2
  • 子节点的索引为 i,则其父节点的索引为 (i-1)/2

3. 堆的基本操作

3.1 插入操作

插入新元素时,先将其放在堆的末尾,然后通过上滤(sift-up)操作将其移动到正确的位置。

#include <stdio.h>
#include <stdlib.h>#define MAX_SIZE 100typedef struct {int data[MAX_SIZE];int size;
} Heap;void initHeap(Heap* heap) {heap->size = 0;
}void siftUp(Heap* heap, int index) {int parent = (index - 1) / 2;while (index > 0 && heap->data[parent] < heap->data[index]) {int temp = heap->data[parent];heap->data[parent] = heap->data[index];heap->data[index] = temp;index = parent;parent = (index - 1) / 2;}
}void insert(Heap* heap, int value) {if (heap->size == MAX_SIZE) {printf("Heap overflow\n");return;}heap->data[heap->size] = value;siftUp(heap, heap->size);heap->size++;
}

3.2 删除操作

删除堆顶元素时,用堆的最后一个元素替换堆顶元素,然后通过下滤(sift-down)操作将其移动到正确的位置。

void siftDown(Heap* heap, int index) {int left = 2 * index + 1;int right = 2 * index + 2;int largest = index;if (left < heap->size && heap->data[left] > heap->data[largest]) {largest = left;}if (right < heap->size && heap->data[right] > heap->data[largest]) {largest = right;}if (largest != index) {int temp = heap->data[index];heap->data[index] = heap->data[largest];heap->data[largest] = temp;siftDown(heap, largest);}
}int deleteMax(Heap* heap) {if (heap->size == 0) {printf("Heap underflow\n");return -1;}int max = heap->data[0];heap->data[0] = heap->data[heap->size - 1];heap->size--;siftDown(heap, 0);return max;
}

3.3 堆排序

堆排序(Heap Sort)是一种利用堆这种数据结构所设计的排序算法。

void heapify(Heap* heap) {for (int i = (heap->size / 2) - 1; i >= 0; i--) {siftDown(heap, i);}
}void heapSort(int* array, int size) {Heap heap;initHeap(&heap);for (int i = 0; i < size; i++) {insert(&heap, array[i]);}heapify(&heap);for (int i = size - 1; i >= 0; i--) {array[i] = deleteMax(&heap);}
}

4. 堆的应用

4.1 优先队列

堆实现的优先队列可以在O(log n)时间内插入元素和删除最大(或最小)元素。

#include <stdio.h>
#include <stdlib.h>typedef struct {Heap heap;
} PriorityQueue;void initPriorityQueue(PriorityQueue* pq) {initHeap(&pq->heap);
}void enqueue(PriorityQueue* pq, int value) {insert(&pq->heap, value);
}int dequeue(PriorityQueue* pq) {return deleteMax(&pq->heap);
}

4.2 堆排序

堆排序是一种基于堆的数据结构的排序算法,时间复杂度为O(n log n)。

void heapSort(int* array, int size) {Heap heap;initHeap(&heap);for (int i = 0; i < size; i++) {insert(&heap, array[i]);}heapify(&heap);for (int i = size - 1; i >= 0; i--) {array[i] = deleteMax(&heap);}
}
http://www.cadmedia.cn/news/5033.html

相关文章:

  • 天眼查询企业信息电话win7优化工具哪个好用
  • 建设网站系统北京seo设计公司
  • 设计公司企业想法seo怎么优化方案
  • 网站建设有多少公司seo
  • 餐饮公司网站建设策划书网络营销环境宏观微观分析
  • 网站建设的要点什么是网络营销?
  • 国外h5制作网站模板下载一诺网络推广公司
  • 如何自己做网站推广淘宝客如何自己创造一个网站平台
  • 传奇服务器网站如何建设关键词优化推广公司哪家好
  • 幼儿园网站建设与管理百度推广客户端下载
  • 济南网站建设方案书范文手机如何建立网站
  • 建程网信息可靠吗外贸网站建设优化推广
  • wordpress 小兽台州seo排名扣费
  • 金华 网站建设国外网站怎么推广
  • 上海外贸公司集中在哪些地方襄阳网站seo
  • 做问卷的网站好北京百度关键词优化
  • 中卫市住房建设局网站seo标题优化的心得总结
  • 自己怎么优化网站排名seoul什么意思
  • 企业名录搜索软件现在那个能用搜索引擎优化的具体措施
  • 阳网站建设如何用html制作一个网页
  • 广东网站建设微信商城开发电商网络推广是什么
  • 自己做个网站怎么赚钱2022近期重大新闻事件10条
  • 12306网站建设费用百度推广app下载安卓版
  • 郓城菏泽网站建设信息检索关键词提取方法
  • 大鹏网络网站建设报价seo排名点击报价
  • 正规的网站制作什么是seo搜索
  • 涿州市网站建设百度广告推广
  • 营销型网站建设营销型网站建设淘词神器
  • 郑州加盟网站建设seo实战教程
  • 网站规划设计流程百度网页版怎么切换