堆排序的算法实现(C/C++)

来源:互联网 发布:打开mpp的软件 编辑:程序博客网 时间:2024/06/01 08:16
/*2013年1月4日16:29:29堆排序,建成大顶堆的形式,然后进行输出或者其他操作在VC++6.0的运行结果是:---------------------------80   35   30   20   17   15   12   10   2---------------------------*/# include <stdio.h># define N    10 void HeapSort(int data[], int n );void HeapAdjust(int data[], int s ,int m);int main(void){int a[] = {0,20,12,35,15,10,80,30,17,2,1} ; HeapSort(a,N);putchar(10);return 0 ;}void HeapAdjust(int data[], int s ,int m){int rc = data[s];for (int j = 2 * s ; j <= m ; j *= 2){if (j < m && data[j] < data[j+1]){j ++ ;}if (rc >= data[j] ){break;}data[s] = data[j] ;s = j ;}data[s] = rc ;return ;}void HeapSort(int data[], int n ){for (int i = n /2 ; i > 0 ; i -- ){HeapAdjust(data,i,n);}for(i = n ; i > 1 ; -- i){printf("%d   ",data[1]);int temp = data[1] ;data[1]  = data[i]  ;data[i]  = temp; HeapAdjust(data,1,i-1);}return ;}