堆排序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;

}

相关推荐
源代码•宸5 分钟前
分布式缓存-GO(分布式算法之一致性哈希、缓存对外服务化)
开发语言·经验分享·分布式·后端·算法·缓存·golang
旖旎夜光39 分钟前
多态(11)(下)
c++·学习
yongui4783444 分钟前
MATLAB的指纹识别系统实现
算法
高山上有一只小老虎1 小时前
翻之矩阵中的行
java·算法
yangpipi-1 小时前
《C++并发编程实战》 第4章 并发操作的同步
开发语言·c++
jghhh011 小时前
RINEX文件进行卫星导航解算
算法
Chance_to_win1 小时前
C++基础知识
c++
爱思德学术1 小时前
中国计算机学会(CCF)推荐学术会议-A(计算机科学理论):LICS 2026
算法·计算机理论·计算机逻辑
CVHub1 小时前
多模态图文训推一体化平台 X-AnyLabeling 3.0 版本正式发布!首次支持远程模型推理服务,并新增 Qwen3-VL 等多款主流模型及诸多功能特性,等
算法
有趣的我1 小时前
C++ 多态介绍
开发语言·c++