#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define max_size 100
using namespace std;
void BuidHeap(int *a,int size);
void HeapAdjust(int i,int *a,int size);
void HeapSort(int *a , int size);
void BuidHeap(int *a,int size){
int i;
for (i = size/2;i >= 1;i--){
HeapAdjust(i,a,size);
}
}
void HeapAdjust(int i,int *a,int size){
int lchild = 2 * i;
int rchild = 2 * i + 1;
int max = i;
if (i <= size/2){
if(lchild <= size && a[lchild] > a[max]){
max = lchild;
}
if(rchild <= size && a[rchild] > a[max]){
max = rchild;
}
if(max != i){
swap(a[i],a[max]);
HeapAdjust(max,a,size);
}
}
}
void HeapSort(int *a , int size){
int i;
BuidHeap(a,size);
for (i = size; i >= 1 ; i--)
{
swap(a[1],a[i]);
HeapAdjust(1,a,i-1);
}
}
int main(){
int size;
int a[max_size];
while(scanf("%d",&size) == 1&& size>0){
for (int i = 1; i <= size; ++i){
cin>>a[i];
}
HeapSort(a,size);
for (int i = 1; i <= size; i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}
排序——堆排序
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 一般来说,这三者的时间复杂度O(NlogN),空间复杂度O(n)优化后,空间复杂度均可为O(1),如下文中的快排和...
- -希尔排序 克服插入排序每次只能交换一对元素的缺点5-间隔的排序,3-间隔的排序,1-间隔排序(最后必须是1-间隔...