/* 堆排序的算法源程序*/ #include #define MAXNUM 100 #define TRUE 1 #define FALSE 0 typedef int KeyType; typedef int DataType; typedef struct { KeyType key; /* 排序码字段 */ /*DataType info; 记录的其它字段 */ } RecordNode; typedef struct { int n; /* n为文件中的记录个数,nrecord[i], *data = pvector->record; child = leftChild(i); /* Rchild是R0的左子女 */ while(childn; RecordNode temp, *data = pvector->record; for (i = n/2-1; i >= 0; i--) sift(pvector, i, n); /* 建立初始堆 */ for (i = n-1; i > 0; i--) { /* 进行n-1趟堆排序 */ temp = data[0]; /* 当前堆顶记录和最后一个记录互换 */ data[0] = data[i]; data[i] = temp; sift(pvector, 0, i); /* 从R0到Ri-1重建堆 */ } } SortObject vector={8, 49,38,65,97,76,13,27,49}; int main(){ int i; heapSort(&vector); for(i = 0; i < 8; i++) printf("%d ", vector.record[i]); getchar(); return 0; }