#include<stdio.h>
#include<stdlib.h>
//堆排序用于查找最大值 或者 最小值
void show(int *p, int n)
{
for (int i = 0; i < n;i++)
{
printf("%4d", p[i]);
}
printf("\n");
}
void findmax(int *arr, int size)
{
for (int j = size - 1; j>0; j--)//从尾部循环到头部
{
int parent = j / 2;//定义
int child = j;//记录当前下标
if (j < size - 1 && arr[j]< arr[j + 1])//该行的j<size-1 可以避免数组越界
{
child++;
}
if (arr[child]>arr[parent])
{
int temp = arr[child];
arr[child] = arr[parent];
arr[parent] = temp;
}
}
}
void heapsort(int *arr, int size)
{
for (int j = size; j > 0; j--)
{
findmax(arr, j);
int temp = arr[0];
arr[0] = arr[j - 1];
arr[j - 1] = temp;
}
}
void heapsort1(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
findmax(arr + i, size-i);
}
}
void main()
{
int a[11] = { 10, 13, 99, 12, 30, 14, 50, 19, 60, 29 };
int b[6] = { 2, 5, 66, 25, 8, 99 };
//printf("%d\n", a[10]);
//int *pp = a;
//printf("%d", pp[10]);
//show(b, 6);
//findmax(a, 11);
//show(a, 11);
//heapsort(a, 11);
heapsort1(a, 10);
show(a, 11);
}
void findmax1(int *arr1, int size1)
{
int *arr = arr1;
int size = size1;
for (int i = 0; i < size1; i++)
{
arr = arr1;
arr = arr + i;
size = size1 - i;
for (int j = size-1; j > 0; j--)//从尾部循环到头部
{
int parent = j / 2;//定义
int child = j;//记录当前下标
if (j < size - 1 && arr[j]< arr[j + 1])//该行的j<size-1 可以避免数组越界
{
child++;
}
if (arr[child]>arr[parent])//最大值攀顶
{
int temp = arr[child];
arr[child] = arr[parent];
arr[parent] = temp;
}
}
}
}
堆排序(C语言)
猜你喜欢
转载自blog.csdn.net/m0_49019274/article/details/114858259
今日推荐
周排行