排序——堆排序(Heap Sortd)
来源:互联网 发布:地理 知乎 编辑:程序博客网 时间:2024/05/23 01:31
堆排序:是指利用堆这种数据结构所设计的排序算法,可以利用数组的特点快速定位指定索引的元素,堆分为大根堆和小根堆,是完全二叉树。
大根堆:每个节点上的值都不大于它父节点的值
小根堆:每个节点上的值都不小于它父节点的值
完全二叉树:除最后一层外每一层上的节点数都达到最大值,在最后一层上只缺少最右边若干个节点。
实例:
#include "stdafx.h"#include <iostream>using namespace std;//堆调整template<class T>void HeapAdjust(T data[], int i, int arrsize){if (i > arrsize / 2)//i为叶子节点return;int lchiled = i * 2;//左叶子节点int rchiled = i * 2 + 1;//右叶子节点int max = i;if (lchiled <= arrsize && data[lchiled] > data[max]){max = lchiled;}if (rchiled <= arrsize && data[rchiled] > data[max]){max = rchiled;}if (max != i){swap(data[i], data[max]);HeapAdjust(data, max, arrsize);}}//创建堆template<class T>void BuiledHeap(T data[], int arrsize){for (int i = arrsize / 2; i >= 1; i--){HeapAdjust(data, i, arrsize);}}//堆排序template<class T>void HeapSort(T data[], int arrsiz){if (arrsiz < 2)return;BuiledHeap(data, arrsiz);swap(data[1], data[arrsiz]);for (int i = arrsiz - 1; i > 1; i--){HeapAdjust(data, 1, i);swap(data[1], data[i]);}}template<class T>void Sprint(T data[], int n){for (int i = 0; i < n; i++){cout << data[i + 1] << " ";}cout << endl;}int _tmain(int argc, _TCHAR* argv[]){int data[] = { 0, 3, 5, 1, 4, 6, 2 };int n = sizeof(data) / sizeof(int) -1;//数组从1开始HeapSort(data, n);Sprint(data, n);return 0;}
0 0
- 排序——堆排序(Heap Sortd)
- 堆排序(Heap Sortd)
- 选择排序—堆排序(Heap Sort)
- 选择排序—堆排序(Heap Sort)
- 选择排序—堆排序(Heap Sort)
- 选择排序—堆排序(Heap Sort)
- 堆排序(heap sort)
- 堆排序(Heap Sort)
- 堆(Heap)排序算法
- 堆排序(Heap-Sort)
- 堆排序(heap sort)
- 堆排序(heap sort)
- 堆排序(Heap Sort)
- 堆排序(heap Sort)
- 堆排序(Heap Sort)
- 堆排序(heap sort)
- 堆排序(Heap Sort)
- 堆排序(Heap-Sort)
- STM32 读写内部Flash
- Linux安装yum环境
- 阿里架构之旅(二)——Dubbo解析
- Qt Charts 2.1完全安装指南
- 打开文件OPEN DATASET的各种语法
- 排序——堆排序(Heap Sortd)
- drawArrayFloat
- 数据库应用-半结构化数据模型1
- Windows API (与磁盘信息相关)
- 【Android】安卓学习笔记之服务的基本用法(二)
- 面试题三 C/C++面试秘笈 查找单链表的中间元素 --程序员面试题
- 10815 - 安迪的第一个字典 Andy's First Dictionary(stringstream+set+迭代器)
- 10个基于 Ruby on Rails 构建的顶级站点
- 让这世界再多一份GNU m4 教程 (全文整理)