#include<stdio.h>
typedef struct Array{
int key;
}Array;
#define LENGTH 10 //排序元素个数
void BuildMaxHeap(Array A[],int len);//建立大根堆
void AdjustDown(Array A[],int k, int len);//调整堆
void HeapSort(Array A[], int len);//堆排序
int main() {
int arr[LENGTH] = {1,52,3,25,563,23,15,63,32,51};
int index = 1;
Array A[LENGTH + 1];
while (index<=LENGTH) {
A[index].key = arr[index-1];
printf("排序前:%d \n",A[index].key);
index++;
}
printf("*****************\n");
HeapSort(A,LENGTH);
index = 1;
while (index <= LENGTH){
printf("排序后:%d \n", A[index].key);
index++;
}
return 0;
}
void AdjustDown(Array A[], int k, int len) {
int i;
A[0] = A[k];
for (i = 2 * k; i <= len; i *= 2) {
if (i < len&&A[i].key < A[i + 1].key) {
i++;
}
if (A[0].key >= A[i].key) {
break;
}
else {
A[k] = A[i];
k = i;
}
}
A[k] = A[0];
//printf("**adjust***\n");
}
void BuildMaxHeap(Array A[], int len) {
for (int i = len / 2; i > 0; i-- ) {
AdjustDown(A,i,len);
}
}
void Swap(int *a,int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void HeapSort(Array A[],int len) {
BuildMaxHeap(A,len);
for (int i = len; i > 1; i--) {
Swap(&A[i].key,&A[1].key);
AdjustDown(A,1,i-1);
}
}
C:C的排序算法:堆排序(HeapSort)
最新推荐文章于 2022-08-16 01:37:54 发布