堆与堆排序

来源:互联网 发布:ipv4 无网络访问权限 编辑:程序博客网 时间:2024/06/04 14:04

原文链接:http://blog.csdn.net/morewindows/article/details/6709644

void MinHeapFixup1(int *a,int i){    int j;    int temp;    j = (i - 1) / 2;    temp = a[i];    while(j >= 0 && i != 0){        if(a[j] < a[i])            break;        a[i] = a[j];        i = j;        j = (i - 1) / 2;    }    a[i] = a[j];}
void MinHeapFixup(int *a,int i){    for(int j = (i - 1) / 2; j >= 0 && i != 0 && a[j] > a[i];i = j,j = (i - 1) / 2)    swap(a[i],a[j]);}
void MinHeapAddNum(int *a,int n,int num){    a[n] = num;    MinHeapFixup(a,n);}
void MinHeapFixdown(int *a,int i,int n){    int j = 2 * i + 1;    int temp = a[i];    while(j < n){        if(j + 1 < n && a[j + 1] < a[j])            j++;        if(a[j] > temp)            break;        a[j] = temp;        i = j;        j = 2 * i + 1;    }        a[i] = temp;}
void MinHeapFixdown2(int *a,int i,int n){    for(int j = 2 * i + 1; j < n && i < n;i = j,j = 2 * i + 1){        if(j + 1 < n && a[j + 1] < a[j])            j++;        if(a[j] > a[i])            break;        swap(a[j],a[i]);     }}
void MinHeapDelNum(int *a,int n){    swap(a[0],a[n - 1]);    MinHeapFixdown(a,0,n - 1);}
void MakeMinHeap(int *a,int n){    for(int i = n / 2 - 1;i >= 0;i--)        MinHeapFixdown(a,i,n);}
void MinHeapSortToDes(int *a,int n){    MakeMinHeap(a,n);    for(i = n - 1;i >= 0;i--){        swap(a[0],a[i]);        MinHeapFixdown(a,0,i);    }}
0 0