堆排序(C语言)

#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;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/m0_49019274/article/details/114858259