#include <string>
typedef int ElementType;
typedef struct Squential {
ElementType *Data;
int Length;
} Squential;
void EnterElement(Squential &List) {
int Len;
int x;
printf("Please input the Element Length:");
scanf("%d", &Len);
fflush(stdin);
List.Length = Len;
List.Data = (ElementType *) malloc(sizeof(ElementType) * List.Length);
for (int i = 0; i < List.Length; ++i) {
scanf("%d", &x);
List.Data[i] = x;
}
}
void PrintList(Squential List) {
for (int i = 0; i < List.Length; ++i) {
printf("%4d", List.Data[i]);
}
printf("\n");
}
//把数据调成大根堆
void HeapAlgorithm(Squential &List){
int Father,Son,Terminal;
for (int j = List.Length; j > 1 ; --j) {
for (int i = j/2-1; i >=0 ; --i) {
Father=i;
Son=Father*2+1;//左子树
while (Son<j){
if (Son+1<j&&List.Data[Son]<List.Data[Son+1]){
Son++;
}
if (List.Data[Son]>List.Data[Father]){
Terminal=List.Data[Father];
List.Data[Father]=List.Data[Son];
List.Data[Son]=Terminal;
Father=Son;
Son=Father*2+1;
} else{
break;
}
}
}
int Trons;
Trons=List.Data[j-1];
List.Data[j-1]=List.Data[0];
List.Data[0]=Trons;
}
}
int main() {
Squential List;
EnterElement(List);
PrintList(List);
HeapAlgorithm(List);
PrintList(List);
return 0;
}
C/C++堆排序
最新推荐文章于 2024-07-22 10:02:43 发布