1、函数声明
#pragma once
void CreateHeap(int* arr, int len);
void Adjust(int* arr, int len, int root);
void Swap(int* p, int* q);
void HeapSort(int* arr, int len);
void ShowArr(int* arr, int len);
2、方法实现
#include<stdio.h>
#include"Heap.h"
void CreateHeap(int* arr, int len)
{
int j = (len - 2) / 2;
for (; j >= 0; j--)
{
Adjust(arr,len,j);
}
}
void Adjust(int *arr,int len,int root )
{
int i = root;
int j = i * 2 + 1;
while (j < len)
{
if (j < len-1 && arr[j] < arr[j + 1]) j++;
if (arr[i] < arr[j])
{
Swap(&arr[i], &arr[j]);
i = j;
j = i * 2 + 1;
}
else
{
break;
}
}
}
void Swap(int* p, int* q)
{
int tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
void HeapSort(int* arr, int len)
{
CreateHeap(arr, len);
int count = len;
for (int i = 0; i < count; i++)
{
Swap(&arr[0], &arr[len - 1]);
CreateHeap(arr, --len);
}
}
void ShowArr(int* arr, int len)
{
for (int i = 0; i < len; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
3、主函数测试
#include<stdio.h>
#include"Heap.h"
#include<stdlib.h>
int main()
{
int arr[10];
int size = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < size; i++)
{
arr[i] = rand()% 200;
}
HeapSort(arr,size);
ShowArr(arr, size);
return 0;
}
4、测试结果