#include<stdio.h>
void swap(int * a,int *b){
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}
void maxHeapify(int a[],int len,int i){
int l = 2*i;
int r = 2*i+1;
int largest = i;
if(l<len&&a[l]>a[largest]){
largest = l;
}
if(r<len&&a[r]>a[largest]){
largest = r;
}
if(largest!=i){
swap(&a[i],&a[largest]);
maxHeapify(a,len,largest);
}
}
void buildMaxHeap(int a[],int len){
for(int i = len/2-1;i>=0;i--){
maxHeapify(a,len,i);
}
}
void heapSort(int a[],int len){
buildMaxHeap(a,len);
for(int i = len-1;i>0;i--){
swap(&a[i],&a[0]);
maxHeapify(a,i,0);
}
}
int main(){
int test[] = {5,13,2,25,7,17,20,8,4,1};
heapSort(test,10);
for(int i=0;i<10;i++){
printf("%d\n",test[i]);
}
return 0;
}
void swap(int * a,int *b){
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}
void maxHeapify(int a[],int len,int i){
int l = 2*i;
int r = 2*i+1;
int largest = i;
if(l<len&&a[l]>a[largest]){
largest = l;
}
if(r<len&&a[r]>a[largest]){
largest = r;
}
if(largest!=i){
swap(&a[i],&a[largest]);
maxHeapify(a,len,largest);
}
}
void buildMaxHeap(int a[],int len){
for(int i = len/2-1;i>=0;i--){
maxHeapify(a,len,i);
}
}
void heapSort(int a[],int len){
buildMaxHeap(a,len);
for(int i = len-1;i>0;i--){
swap(&a[i],&a[0]);
maxHeapify(a,i,0);
}
}
int main(){
int test[] = {5,13,2,25,7,17,20,8,4,1};
heapSort(test,10);
for(int i=0;i<10;i++){
printf("%d\n",test[i]);
}
return 0;
}
堆排序算法实现
本文介绍了一种使用最大堆实现的堆排序算法,并提供了完整的C语言代码示例。该算法首先构建一个最大堆,然后通过不断交换堆顶元素与最后一个元素并调整剩余元素为新的最大堆来完成排序。
1万+

被折叠的 条评论
为什么被折叠?



