堆排序code

#include<bits/stdc++.h>

using namespace std;

#define maxn 501

int arr[maxn];

void swap(int i,int j){

int tmp=arr[i];

arr[i]=arr[j];

arr[j]=tmp;

}

//向上调整函数

void heapinsert(int x){

if(x==0) return;

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

while(1){

if(i<0||arr[i]>=arr[x]) 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)?(arr[l]>arr[l+1]?l:l+1):l;

if(arr[best]>arr[pl]){

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 ",arr[i]);

}

puts("");

}

int main(){

int n;

cin>>n;

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

cin>>arr[i];

}

//heapsort1(n);

//print(arr,n);

heapsort2(n);

print(arr,n);

return 0;

}

相关推荐
xiaoye-duck7 分钟前
C++ string 底层原理深度解析 + 模拟实现(下)——面试 / 开发都适用
开发语言·c++·stl
Azure_withyou37 分钟前
Visual Studio中try catch()还未执行,throw后便报错
c++·visual studio
琉染云月39 分钟前
【C++入门练习软件推荐】Visual Studio下载与安装(以Visual Studio2026为例)
c++·visual studio
L_09072 小时前
【C++】高阶数据结构 -- 红黑树
数据结构·c++
A_nanda3 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
代码雕刻家4 小时前
2.4.蓝桥杯-分巧克力
算法·蓝桥杯
Ulyanov4 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
智者知已应修善业6 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
划破黑暗的第一缕曙光6 小时前
[数据结构]:5.二叉树链式结构的实现1
数据结构
91刘仁德6 小时前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法