解题思路:

注意事项:

参考代码:

#include<cstdio>

int arr[100];

void swap(int &a,int& b){

int temp=a;

a=b;

b=temp;

}

void PercDown(int pos,int size){

if(pos>=size)return;

int parent=pos;

int child=parent*2+1;

for(;child<size;parent=child,child=parent*2+1){

if(child+1<size&&arr[child+1]>arr[child])

child++;

if(arr[parent]<arr[child])

swap(arr[parent],arr[child]);

else

return;

}

}

void buildHeap(int size){

for(int i=size/2;i>=0;i--){

PercDown(i,size);

}

void heap_sort(int size){

int currentSize=size;

buildHeap(size);

for(;currentSize>0;currentSize){

swap(arr[0],arr[--currentSize]);

PercDown(0,currentSize); 

}

}


int main(){

int size=0;

while(scanf("%d",&size)==1){

int i=0;

while(i<size)

scanf("%d",&arr[i++]);

heap_sort(size);

for(i=0;i<size;i++)

printf("%d ",arr[i]);

putchar('\n');

}

return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论