当前位置:网站首页>Manually implement heap sorting -838 Heap sort
Manually implement heap sorting -838 Heap sort
2022-07-05 04:41:00 【The wind is a little strong】
Heap properties
Pile up (Heap) Is a kind of data structure , They have a tree structure , And it can ensure that the parent node is larger than the child node ( Or small ). When the root node saves the maximum value in the heap , be called Big root pile ; conversely , It is called a Heap .
Binary heap (Binary Heap) It's the simplest 、 Common heap , It is a tree that conforms to the nature of heap Perfect binary tree . It can achieve O(logn) Insert or delete a value , also O(1) Query the largest ( Or the smallest ) value .
Storage
Take the small root pile for example
As a complete binary tree , A binary stack can be used 1-index To store , For the node p,p2 That is, the left son ,p2+1 That is, the right node . meanwhile , use size Record the number of nodes in the current binary heap .
The relevant operation
up(int x): Compare with the root node of the current node , If the current point is smaller than the root node , Exchange with the root node
down(int x): Compare with the left and right sons of the current node , If the left and right sons are a little smaller than the current , Then exchange the younger son with the current point 
Templates
// h[N] Store values in the heap , h[1] It's the top of the pile ,x My left son is 2x, The right son is 2x + 1
// ph[k] Store the k The position of an insertion point in the heap
// hp[k] The subscript in the heap is k Which point is inserted
int h[N], ph[N], hp[N], size;
// Swap two points , And its mapping relationship
void heap_swap(int a, int b)
{
swap(ph[hp[a]],ph[hp[b]]);
swap(hp[a], hp[b]);
swap(h[a], h[b]);
}
void down(int u)
{
int t = u;
if (u * 2 <= size && h[u * 2] < h[t]) t = u * 2;
if (u * 2 + 1 <= size && h[u * 2 + 1] < h[t]) t = u * 2 + 1;
if (u != t)
{
heap_swap(u, t);
down(t);
}
}
void up(int u)
{
while (u / 2 && h[u] < h[u / 2])
{
heap_swap(u, u / 2);
u >>= 1;
}
}
// O(n) Building the heap
for (int i = n / 2; i; i -- ) down(i);
subject

Code
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100005;
int h[N],len;
int n,m;
void down(int u){
int t=u; //t Save the subscript of the lowest decimal
if(2*u<=len && h[2*u]<h[t]){
// Subscript to be u My point has a left son , The left son is smaller
t=2*u; // The youngest is the left son
}
if(2*u+1<=len && h[2*u+1]<h[t]){
// Subscript to be u The right son of is smaller than the current youngest
t=2*u+1; // The youngest is the right son
}
if(u!=t){
// If the current value is not the minimum , So update
swap(h[u],h[t]); // Exchange the smallest to u The location of
down(t); // Recursive current (2u+1) The following values
}
}
void up(int u){
if(u/2>=1 && h[u/2]>h[u]){
// There is a parent node ,
swap(h[u/2],h[u]);
up(u/2);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>h[i];
}
len=n;
for(int i=n/2;i>0;i--){
// Because the last layer has no child nodes , So just cycle n/2 That's it .
down(i);
}
while(m--){
cout<<h[1]<<" ";
h[1]=h[len]; // After taking out the minimum value , Put the last value in the first position , Total number minus one , then down
len--;
down(1);
}
return 0;
}
Reference resources Algorithm learning notes (47): Binary heap
边栏推荐
- Interface joint commissioning test script optimization V5.0 (end)
- 函数(基本:参数,返回值)
- Aperçu en direct | Services de conteneurs ACK flexible Prediction Best Practices
- Variable category (automatic, static, register, external)
- 直播预告 | 容器服务 ACK 弹性预测最佳实践
- Wan broadband access technology V EPON Technology
- Hexadecimal to decimal
- MacBook installation postgresql+postgis
- CSDN正文自动生成目录
- Flutter tips: various fancy nesting of listview and pageview
猜你喜欢
![Private collection project practice sharing [Yugong series] February 2022 U3D full stack class 006 unity toolbar](/img/bf/fb4e85143d1461a2026c88cda4a18d.jpg)
Private collection project practice sharing [Yugong series] February 2022 U3D full stack class 006 unity toolbar
![[Business Research Report] Research Report on male consumption trends in other economic times -- with download link](/img/08/7ea490c46c3f64af3e78d07b19b3e3.jpg)
[Business Research Report] Research Report on male consumption trends in other economic times -- with download link
![[crampon game] MC tutorial - first day of survival](/img/81/82034c0382f545c39bd8c15f132ec7.jpg)
[crampon game] MC tutorial - first day of survival

概率论与数理统计考试重点复习路线

Discussion on the dimension of confrontation subspace

The 22nd Spring Festival Gala, an immersive stage for the yuan universe to shine into reality

指针函数(基础)

American 5g open ran suffered another major setback, and its attempt to counter China's 5g technology has failed

TPG x AIDU|AI领军人才招募计划进行中!

Reading and visualization of DICOM, MHD and raw files in medical imaging
随机推荐
【科普】热设计基础知识:5G光器件之散热分析
The principle of attention mechanism and its application in seq2seq (bahadanau attention)
Uncover the seven quirky brain circuits necessary for technology leaders
Debug insights
[uniapp] system hot update implementation ideas
Error statuslogger log4j2 could not find a logging implementation
Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套
SQL set operation
Construction d'un Cluster redis sous Windows
Neural network and deep learning Chapter 1: introduction reading questions
[crampon programming] lintcode decoding Encyclopedia - 1100 strange printer
Group counting notes (1) - check code, original complement multiplication and division calculation, floating point calculation
What are the building energy-saving software
Basic analysis of IIC SPI protocol
防护电路中的元器件
Sequence diagram of single sign on Certification Center
SPI read / write flash principle + complete code
About the prompt loading after appscan is opened: guilogic, it keeps loading and gets stuck. My personal solution. (it may be the first solution available in the whole network at present)
3 minutes learn to create Google account and email detailed tutorial!
Sword finger offer 04 Search in two-dimensional array