堆插入、删除、排序
来源:互联网 发布:mac 实用软件下载 编辑:程序博客网 时间:2024/05/18 01:15
最大堆(最小堆)是一个二叉完全树,节点的子节点i的下表为2*i+1,2*i+2
插入过程:插入到数组末尾,然后逐层向上开始调整。
删除:通常删除根节点,将根节点和末尾节点交换后,从根节点向下调整。
插入过程:插入到数组末尾,然后逐层向上开始调整。
删除:通常删除根节点,将根节点和末尾节点交换后,从根节点向下调整。
排序:升序排序 ---> 最大堆 :每次将尾部节点和根节点交换,堆长度减1,从根节点向下调整,堆长度减为1时排序结束!
/*************************************************************************
> File Name: miniHeap.cpp > Author: ltf > Mail: @qq.com > Created Time: Mon 28 Mar 2016 04:32:23 PM CST ************************************************************************/#include<iostream>using namespace std;int heapSize = 0; // 堆的大小int heap[100];//[start,end]// 从start到end开始向下调整void siftDown(int start,int end){int j = start;int i = 2*start+1;while(i <= end){// find the min onei =(i<end)&&(heap[i] > heap[i+1])? i+1:i;if(heap[j] > heap[i]){swap(heap[i],heap[j]);i = j*2+1;}elsebreak;}}// 从第start元素开始向上调整void siftUp(int start){int i = start;// -1/2=0 --> i>0while(i > 0){i = (i-1)/2;if(heap[i] <= heap[start])break;else{swap(heap[i],heap[start]);start = i;}}}void insertElement(int value){heap[heapSize] = value;heapSize++;siftUp(heapSize-1);}bool deleteElement(int &value){if(heapSize == 0)return false;value = heap[0];heap[0] = heap[heapSize-1];heapSize--;siftDown(0,heapSize-1);}void print(){int i;for(i=0;i < heapSize;i++)cout << heap[i] <<" ";cout << endl;}//minHeap sort increasevoid heapSort(){int i = heapSize-1;while(i>0){swap(heap[0],heap[i]);siftDown(0,i-1);i--;}}int main(){int value = 0;cout << "input the heap elements,end with 0" << endl;for(;;){cin >> value;if(value != 0)insertElement(value);elsebreak;}print();cout << "after delete:" << endl;deleteElement(value);cout << value << "(deleted)";print();heapSort();cout << "after sorted:" << endl;print();return 0;}
0 0
- 堆插入、删除、排序
- 堆的插入 删除 排序
- 堆排序/插入/删除 整理
- 二叉堆 删除 插入 调整 堆排序
- 最大堆-插入/删除/排序-图解
- 堆的插入、删除、修改、排序
- Theory:大小顶堆,排序,插入,删除
- Java-最大堆的排序,插入,删除
- 堆的建立、删除、插入操作以及堆排序
- 堆排序及堆的插入,删除等
- 最大堆的插入 删除 初始化 堆排序
- 堆的插入、删除和建立操作,堆排序
- 堆的插入、删除和建立操作,堆排序
- C++实现堆、最大堆、最小堆 -- 堆排序插入删除操作
- 堆的构建、堆的插入、堆的删除、堆排序
- 堆排序,插入,删除,调整算法(大顶堆)
- 堆排序,插入,删除,调整算法(大顶堆)
- 堆的基本操作:定义、创建、插入、删除、排序
- Codeforces 650B 二分
- 群
- 求1到n的倒数和
- C++函数重载
- The history of the development of the computer
- 堆插入、删除、排序
- TeX Live for windows 安装及更新
- 类成员变量初始化位置
- 输出标准体重
- OSX下编译framework bundle
- SQL语句Where中使用别名作为判断条件
- 二叉搜索树的插入和删除
- C++函数重载和const
- 第7章 图