堆排序
来源:互联网 发布:吸入麻醉药mac值表 编辑:程序博客网 时间:2024/06/05 13:33
定义:堆:堆数据结构是一种数组现象,可以视为一个完全二叉树,树中的每个节点与数组中存放该节点值的那个元素对应;
性质: a[parent[i]] >= A[i];(大顶堆) a[parent[i]] <=A[i](小顶堆)
堆的应用:优先级队列;
三个常用的操作说明:
HeapAdjust:一个已经有序的堆顶点插入一个节点的调整过程;
BuildHeap:一个无序数组调整成一个堆;(向上排序)
HeapSort:对一个有序堆按序输出的过程;
#include "stdafx.h"#include <iostream>using namespace std;int MAX = 100;typedef struct {int heapsize;int array[100];}heap;void HeapAdjust(int *a,int i,int heapsize)//调整过程{int lchild = 2*i;int rchild = 2*i+1;int max = i;if(lchild <= heapsize&&a[i] < a[lchild])max = lchild;if(rchild <= heapsize && a[max] < a[rchild])max = rchild;if(max != i){int temp = a[i];a[i] = a[max];a[max] = temp;HeapAdjust(a,max,heapsize);}}void BuildHeap(int *a,int size)//建堆过程{int i;for(i = size/2;i > 0;i--)//最大的非叶节点为size/2{HeapAdjust(a,i,size);}}void HeapSort(int *a,int size)//堆排序过程{int i = size;int k;BuildHeap(a,size);for(i = size;i >1;i--){k = a[1];a[1] = a[i];a[i] = k;HeapAdjust(a,1,i-1);}}int _tmain(int argc, _TCHAR* argv[]){//Merge_sort(a,0,9);int size;heap h1;while(scanf("%d",&size) ==1 &&size > 0){int i;h1.heapsize = size;for(i = 1;i <= size;i++)cin >> h1.array[i];HeapSort(h1.array,h1.heapsize);for(i = 1;i <= size;i++)printf("%d",h1.array[i]);}return 0;}
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- zend studio 9.0.3 破解与汉化
- 每天一算法(根据上排给出十个数,在其下排填出对应的十个数)
- Your project contains error(s) Android
- pthread 简要使用指南(二) joinable 与 detached
- hdu1853 Cyclic Tour . 最小费用流 StL解法
- 堆排序
- php中\r \r\n \t的区别
- 成员函数模板
- ios使用正则表达式
- Transportation 最小费用流 hdu3667 (拆边)
- 组合动画CAAnimationGroup
- java 调用天气预报的webservice
- poj 3467 Cross Counting
- JSONCPP