堆排序code

#include<bits/stdc++.h>

using namespace std;

#define maxn 501

int arrmaxn;

void swap(int i,int j){

int tmp=arri;

arri=arrj;

arrj=tmp;

}

//向上调整函数

void heapinsert(int x){

if(x==0) return;

int i=(x-1)/2; //父节点

while(1){

if(i<0||arri>=arrx) break;

else{

swap(x,i);

}

x=i;

i=(i-1)/2;

}

}

//向下调整函数

void heapify(int pl,int size){

int l=pl*2+1;

if(l>=size){

return;

}

while(l<size){

int best=(l+1<size)?(arrl>arrl+1?l:l+1):l;

if(arrbest>arrpl){

swap(best,pl);

}

else{

break;

}

pl=best;

l=pl*2+1;

}

}

//从顶到底建堆排序

void heapsort1(int n){

for(int i=0;i<n;i++){

heapinsert(i);

}

int size=n;

while(size>1){

size--;

swap(0,size);

heapify(0,size);

}

}

//从底到顶建堆排序

void heapsort2(int n){

for(int i=n-1;i>=0;i--){

heapify(i,n);

}

int size=n;

while(size>1){

size--;

swap(0,size);

heapify(0,size);

}

}

void print(int arr\[\],int n){

for(int i=0;i<n;i++){

printf("%d ",arri);

}

puts("");

}

int main(){

int n;

cin>>n;

for(int i=0;i<n;i++){

cin>>arri;

}

//heapsort1(n);

//print(arr,n);

heapsort2(n);

print(arr,n);

return 0;

}

相关推荐
努力努力再努力wz7 分钟前
【CUDA入门系列】CUDA编程实战:设备选择、显存管理、Kernel、Stream 与 Event 全流程梳理
开发语言·c++
Evand J8 分钟前
【电机滤波例程1】PMSM永磁同步电机转速与位置估计,MATLAB程序:标准无迹卡尔曼滤波、模型说明与仿真验证
算法·matlab·电机·ekf·负载·卡尔曼滤波
沫璃染墨23 分钟前
《从零入门Linux系统篇(五十八):线程篇·十一——线程安全与死锁详解:从可重入到多锁管理》
linux·服务器·开发语言·c++·驱动开发·安全·架构
打码的老程是远篁26 分钟前
手把手教你玩转大模型——3. Transformer 的位置编码——模型怎么知道谁在前,谁在后?
人工智能·算法
嘎嘎风27 分钟前
MiniMind 学习笔记之 06 一张图、一百行:MiniMind 的骨架
算法·源码
郝学胜_神的一滴27 分钟前
C++ Templates 05:那些容易踩坑的技巧性基础知识
c++·visual studio
用户73416810354830 分钟前
只盯被动响应做状态监测?论“控制信号”在变工况故障诊断中的重要作用
算法
Ivanqhz32 分钟前
MQA、GQA、稀疏/滑动窗口注意力及混合范式
人工智能·算法·机器学习
罗湖老棍子41 分钟前
荒岛野人(信息学奥赛一本通- P1637)(洛谷-P2421)
算法·数论·枚举·裴蜀定理·扩展欧几里得·扩展中国剩余定理
朝朝辞暮i1 小时前
C++ 第 40 章:ROS2 Publisher + Timer + Subscriber + Callback + Executor 完整闭环
开发语言·c++·算法·ros2