堆排序---C语言

堆排序详解:点这里

使用向下调整算法实现堆排序,完整代码

#include<stdio.h>

void Swap(int* p1, int* p2)
{
	int* tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

void Print(int* arr, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

// 堆排序,建大堆
void AdjustDown(int* a, int n, int parent)
{
	int child = 2 * parent + 1;
	while (child < n)
	{
		if (child + 1 < n && a[child + 1] > a[child])
		{
			child++;
		}
		if (a[parent] < a[child])
		{
			Swap(&a[parent], &a[child]);
			parent = child;
			child = 2 * parent + 1;
		}
		else
		{
			break;
		}
	}
}

void HeapSort(int* a, int n)
{
	//排升序,建大堆
	for (int i = (n - 1 - 1) / 2; i >= 0; i--)
	{
		AdjustDown(a, n, i);
	}
	int end = n - 1;
	while (end > 0)
	{
		Swap(&a[0], &a[end]);
		AdjustDown(a, end, 0);
		end--;
	}
}

void test()
{
	int arr[] = { 6,3,4,2,0,1,8,7,5 };
	int len = sizeof(arr) / sizeof(int);
	HeapSort(arr, len);
	Print(arr, len);
}

int main()
{
	test();
	return 0;
}

相关推荐

  1. 排序-C语言

    2024-06-08 17:08:05       16 阅读
  2. 排序---C语言

    2024-06-08 17:08:05       10 阅读
  3. 排序算法-排序(含C语言代码示例)

    2024-06-08 17:08:05       48 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 17:08:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 17:08:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 17:08:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 17:08:05       20 阅读

热门阅读

  1. [AIGC] 自定义Spring Boot中BigDecimal的序列化方式

    2024-06-08 17:08:05       8 阅读
  2. Pinia的定义及使用

    2024-06-08 17:08:05       6 阅读
  3. 信奥之路(五)——顺序结构

    2024-06-08 17:08:05       6 阅读
  4. 【HarmonyOS】代码规范参考

    2024-06-08 17:08:05       8 阅读
  5. 力扣每日一题 6/5

    2024-06-08 17:08:05       9 阅读
  6. Ansible——setup模块

    2024-06-08 17:08:05       7 阅读
  7. 开关电源中电感设计

    2024-06-08 17:08:05       9 阅读
  8. 自注意力机学习

    2024-06-08 17:08:05       8 阅读