算法导论中堆排序c语言实现

来源:互联网 发布:nat123如何解析tk域名 编辑:程序博客网 时间:2024/05/18 15:56
#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;
}

原创粉丝点击