当前位置: 首页 > article >正文

堆排序(数据结构)

本期讲解堆排序的实现

——————————————————————

1. 堆排序

堆排序即利用堆的思想来进行排序,总共分为两个步骤:


  1. 建堆
    • 升序:建大堆
    • 降序:建小堆
2. 利用堆删除思想来进行排序.

建堆和堆删除中都用到了向下调整,因此掌握了向下调整,就可以完成堆排序。

PS: 向下调整的代码实现已在上一篇博客最后(Heap.c) 分享

堆排序的两种实现

在此,我们提倡第二种堆排序的方法

1.


int a[]={2,5,7,4,1,6,9,8,3};

void HeapSort(int* a,int n)
{
	Heap heap;
	HeapInitArray(&heap, a, n);//建立了小堆

	//排序
	int i = 0;
	while (!HeapEmpty(&heap))
	{
		a[i] = HeapTop(&heap);
		printf("%d\n",a[i]);
		i++;//为了打印
		HeapPop(&heap);
	}

	HeapDestroy(&heap);
}

缺点:
 1.空间复杂度为O(N)
 2.需要去写堆的数据结构(子函数)太麻烦。

2.

//找降序,建小堆
void HeapSort(HeapDataType* a ,int n)
{
	//1.原数组建小堆,时间复杂度O(N)
	for (int i = (n - 1 - 1) / 2; i >= 0; i--)
	{
		AdjustDown(a,n,i);//参数:目的地,个数,开始调整的位置(parent)
	}
	//2.交换,继续使用向下调整, 时间复杂度O(N*logN)
	int end = n - 1;
	while (end > 0)
	{
		Swap(&a[0],&a[end]);
		AdjustDown(a,end,0);
		--end;
	}
}

堆排序的时间复杂度为o(N*logN)

这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助

欢迎各位点赞,收藏和关注哦

如果有疑问或有不同见解,欢迎在评论区留言哦

后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享


http://www.kler.cn/a/274281.html

相关文章:

  • leetcode-128.最长连续序列-day14
  • 天地图接口Python代码详解
  • LabVIEW电机控制中的主动消抖
  • 你的第一个博客-第一弹
  • Linux系统的阻塞方式和非阻塞方式是什么意思?
  • EMMC , UFS, SSD介绍
  • SpringBoot项目串口通讯之jSerialComm
  • 什么是多模态学习?
  • 代码随想录|Day21|回溯01|77.组合
  • 面试算法-47-有效的括号
  • 基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的应用教程
  • Unity类银河恶魔城学习记录11-2 p104 Inventoty源代码
  • C++ Qt开发:QUdpSocket网络通信组件
  • Java安全 反序列化(1) URLDNS链原理分析
  • 基于51单片机PT100温度检测LCD1602显示(程序+原理图+PCB+仿真+全套资料)
  • ModbusTCP转Profinet网关高低字节交换切换
  • 接口和抽象类的区别
  • 深入探讨Python中的文件操作与文件IO操作【第141篇—Python实现】
  • 【Swing】Java Swing实现省市区选择编辑器
  • 第四百一十一回
  • Java基础-IO流
  • 详细了解CSS
  • 全国农产品价格分析预测可视化系统设计与实现
  • python Jira库如何修改一个issue的status
  • 差分【Java】
  • 富格林:曝光暗箱细节确保安全