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

}

相关推荐
To_OC4 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
2401_841495644 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
fqbqrr5 小时前
2607C++,soui与安卓
c++·soui
fqbqrr8 小时前
2607C++,使用微软detours勾挂工具
c++
爱刷碗的苏泓舒8 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
蓝悦无人机11 小时前
C++基础 — 函数总结
开发语言·c++
烬羽11 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米11 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
WL学习笔记12 小时前
堆(数据结构)
数据结构·