#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define MAXSIZE 100
typedef int Status;
typedef int KeyType;
typedef int infoType;
typedef struct {
KeyType key;
infoType otherinfo;
}RedType;
typedef struct {
RedType r[MAXSIZE + 1];
int length;
}SqList;
void CreateSqList(SqList &L) {
int i, n;
printf("创建线性表:\n");
printf("输入数据个数:");
scanf("%d", &n);
L.length = n;
/* srand((unsigned)time(NULL));
for (i = 1; i <= L.length; i++)
L.r[i].key = rand() % 200;*/
printf("输入数据:\n");
for (i = 1; i <= L.length; i++) {
printf("输入第%d个数据:", i);
scanf("%d", &L.r[i].key);
}
}
void HeapAdjust(SqList &L, int s, int m) {
int j, temp;
temp = L.r[s].key;
for (j = 2 * s; j <= m; j *= 2) {
if (j < m&&L.r[j].key < L.r[j + 1].key) j++;
if (temp >= L.r[j].key) break;
L.r[s].key = L.r[j].key;
s = j;
}
L.r[s].key = temp;
}
void HeapSort(SqList &L) {
int temp;
int i;
for (i = L.length / 2; i > 0; i--)
HeapAdjust(L, i, L.length);
for (i = L.length; i > 1; i--) {
temp = L.r[i].key;
L.r[i].key = L.r[1].key;
L.r[1].key = temp;
HeapAdjust(L, 1, i - 1);
}
}
void main() {
int i;
SqList L;
CreateSqList(L);
// printf("随机生成数据:");
for (i = 1; i <= L.length; i++)
printf("%d ", L.r[i].key);
printf("\n");
printf("堆排序后的线性表:");
HeapSort(L);
for (i = 1; i <= L.length; i++)
printf("%d ", L.r[i].key);
getchar();
getchar();
}
堆排序
最新推荐文章于 2022-10-22 13:08:50 发布