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

绍兴网站建设做网站做新零售这些注册网站和找货源6

绍兴网站建设做网站,做新零售这些注册网站和找货源6,wordpress主题更换,西双版纳建设厅网站看这篇前请先把我上一篇了解一下#xff1a;深入理解数据结构第一弹——二叉树#xff08;1#xff09;——堆-CSDN博客 前言#xff1a; 相信很多学习数据结构的人#xff0c;都会遇到一种情况#xff0c;就是明明最一开始学习就学习了时间复杂度#xff0c;但是在后期…看这篇前请先把我上一篇了解一下深入理解数据结构第一弹——二叉树1——堆-CSDN博客 前言 相信很多学习数据结构的人都会遇到一种情况就是明明最一开始学习就学习了时间复杂度但是在后期自己写的程序或者是做到哪个需要判断时间复杂度的题时仍然判断不出来时间复杂度是多少今天我们结合我们上期学习的堆给大家深入剖析一下时间复杂度这个概念同时更深入的理解堆的概念方便我们后期应用堆进行排序等。 目录 一、堆排序 1、堆排序的大体思路 2、堆排序的实例讲解 二、堆排序的时间复杂度 向下排序的时间复杂度 向上排序的时间复杂度 堆排序整体的时间复杂度 总结 一、堆排序 1、堆排序的大体思路 在上一篇我们已经讲过了堆是什么东西我们已经知道堆有大堆和小堆两种形式堆排序的想法正是借助它的这个特点诞生的例如 数组 { 78 3 5 1 9 5 4}在堆中分布为 如图展示的是小堆首先我们先强调一点降序是需要小堆来解决升序是需要大堆来解决 比如说图上这个数组我们要求它的降序序列时因为堆顶元素一定是堆中最小的所以我们就可以把堆顶元素与堆尾元素进行交换然后把堆尾元素刨除在外再进行降序排列 2、堆排序的实例讲解 堆排序与堆相比并没有什么新东西把我前面那章看明白这里直接把代码呈上 除了test.c其他的是直接从上一章搬过来的 Seqlist.h typedef int HPDataType; typedef struct Heap {HPDataType* a;int sz;int capacity; }HP;//初始化 void HeapInit(HP* php); //销毁 void HeapDestory(HP* php); //插入 void HeapPush(HP* php, HPDataType x); //删除 void HeapPop(HP* php); //找堆顶元素 HPDataType HeapTop(HP* php); //判断是否为空 bool HeapEmpty(HP* php); //算个数 int HeapSize(HP* php); test.c //堆排序 void HeapSort(int* a, int n) {//建堆——向下调整建堆O(N-log(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--;} } int main() {int a[] { 7,8,3,5,1,9,5,4 };HeapSort(a, sizeof(a) / sizeof(int));return 0; } Seqlist.c //堆 //初始化 void HeapInit(HP* php) {assert(php);php-a NULL;php-capacity 0;php-sz 0; } //销毁 void HeapDestory(HP* php) {free(php-a);free(php); } //交换 void Swap(HPDataType* p1, HPDataType* p2) {HPDataType tmp *p1;*p1 *p2;*p2 tmp; } //删除//向上调整(小堆) void AdjustUp(HPDataType* a, int child) {int parent (child - 1) / 2;while (child 0){if (a[child] a[parent]){Swap(a[child], a[parent]);child parent;parent (child - 1) / 2;}else{break;}} } //向下调整 void AdjustDown(int* a, int n, int parent) {int child parent * 2 1;while (childn){if (child1na[child 1] a[child]){child;}if (a[child] a[parent]){Swap(a[child], a[parent]);parent child;child parent * 2 1;}else{break;}} }//插入 void HeapPush(HP* php, HPDataType x) {assert(php);if (php-sz php-capacity){int newcapacity php-capacity 0 ? 4 : php-capacity * 2;HPDataType* tmp (HPDataType*)realloc(php-a, sizeof(HPDataType) * newcapacity);php-a tmp;php-capacity newcapacity;}php-a[php-sz] x;php-sz;//向上调整AdjustUp(php-a, php-sz - 1); } //删除 void HeapPop(HP* php) {assert(php);assert(!HeapEmpty(php));Swap(php-a[0], php-a[php-sz - 1]);php-sz--;//向下调整AdjustDown(php-a, php-sz,0); } //判断是否为空 bool HeapEmpty(HP* php) {assert(php);return php-sz 0; } //找堆顶元素 HPDataType HeapTop(HP* php) {assert(php);assert(!HeapEmpty(php));return php-a[0]; } //算个数 int HeapSize(HP* php) {assert(php);return php-sz; } 实现上述代码我们就可以实现堆排序了 二、堆排序的时间复杂度 我们都知道在实现堆时有向上排序和向下排序两种细心的人可能已经注意到我在实现上面那个堆排序用例时用的是向下排序原因就是向下排序的时间复杂度更低接下来我们就来分析一下这两种排序各自的时间复杂度 向下排序的时间复杂度 向上排序的时间复杂度 堆排序整体的时间复杂度 计算堆排序整体的时间复杂度就是计算上面这两步的时间复杂度 第一步 因为这一步实际上就是多次向下调整建堆所以这一步时间复杂度就是向下调整法时间复杂度的倍数那根据渐进表示法就可以表示为O(N-log(N)),因为当N很大时log(N)比N小很多,所以可以忽略表示为ON 第二步: 第二步外循环需要N次内循环看似每次都是一个完整的向下排序法但其实随着循环次数的增加里面向下排序的时间复杂度在不断减小因为堆尾排过去的数字实际上就不用再参与堆排序的所以这一步时间复杂度实际上是O(N*log) 因此堆排序的时间复杂度为ONN*logN 总结 堆排序及其时间复杂度的讲解就到此为止了如果有不理解的地方欢迎在评论区中指出或者与我私信交流欢迎各位大佬来访 创作不易还请各位大佬点赞支持
http://www.w-s-a.com/news/707659/

相关文章:

  • 网站推广seo是什么wordpress 去除顶部
  • 建筑学不会画画影响大吗电子商务沙盘seo关键词
  • 重庆网站建设找承越上海建设工程招投标网
  • 网站建设四个步骤下单的网站建设教程
  • 网站建设合同的验收表响应式网站建设哪家好
  • 手机网站建设视频长沙百家号seo
  • 网站未备案怎么访问网站开发前端需要学什么
  • 正黄集团博弘建设官方网站wordpress设置固定链接和伪静态
  • wordpress 建网站视频如何实现网站生成网页
  • 杭州品牌网站建设推广个人的网站建设目标
  • 济南有哪些网站是做家具团购的贸易公司自建免费网站
  • wap网站psd成立公司在什么网站
  • 网站建设婚恋交友聊城网站建设费用
  • 沈阳网站建设联系方式尉氏县金星网架公司
  • 医院网站建设实施方案基础微网站开发信息
  • 网站建设开发服务费记账百度指数搜索
  • 网站建设备案流程windows优化大师有必要安装吗
  • 怎么网站定制自己做网站卖视频
  • 网站开发二线城市网站制作过程中碰到的问题
  • 最好网站建设公司制作平台小程序开发教程资料
  • 陕西省高速建设集团公司网站国内做会展比较好的公司
  • 建设学校网站的原因网页设计实训报告1500
  • 网站建设客户来源江门网站设计华企立方
  • 自己如何做棋牌网站宁波网络推广优化方案
  • 深圳招聘网站推荐seo网站推广方案
  • 彩票网站开发 合法学术会议网站建设
  • 商务网站建设论文答辩pptseo技术博客
  • 怎样才能有自己的网站桂林搭建公司
  • 哪个网站做视频赚钱万科
  • 莆系医疗网站建设wp如何做网站地图