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

盘锦市政建设集团网站发布外链

盘锦市政建设集团网站,发布外链,网站建设案例ppt,温州网站建设服务目录 前言 一、向上调整算法建堆 二、向下调整算法建堆 三、堆排序 前言 堆排序是基于堆结构的一种排序思想,因此要为一个乱序的数组进行排序的前提是数组必须要是一个堆,所以要先对数组进行建堆操作 一、向上调整算法建堆 时间复杂度:O…

目录

前言

一、向上调整算法建堆

二、向下调整算法建堆 

三、堆排序


前言

        堆排序是基于堆结构的一种排序思想,因此要为一个乱序的数组进行排序的前提是数组必须要是一个堆,所以要先对数组进行建堆操作


一、向上调整算法建堆

        时间复杂度:O( n*logn )

         由于向上调整算法建堆的时间复杂度的证明太过晦涩难懂,还要涉及数学中的错位相减法,所以这里就不证明了,感兴趣的可以自己去了解一下

        这里只需要知道向上调整算法建堆的时间复杂度为 O( n*logn )

//交换两个数的位置
void sweap(int* num1, int* num2)
{int tmp = *num1;*num1 = *num2;*num2 = tmp;
}
//向上调整算法(大根堆)
void AdjustUp(int* arr, int pos)
{//当前调整的位置不能是堆顶if (pos == 0){return;}//寻找双亲节点int parents = (pos - 1) / 2;//当前位置与双亲节点进行比较//如果当前位置的数大于双亲节点,就进行交换,并且继续向上调整//如果当前位置的数小于双亲节点,表示堆已经构建好了if (arr[parents] < arr[pos]){//交换两个数位置sweap(&arr[parents], &arr[pos]);//继续向上调整AdjustUp(arr, parents);}
}
int main()
{//给定一个乱序数组int arr[] = { 8,3,2,6,7,1,4,9,5 };//计算数组元素个数int size = sizeof(arr) / sizeof(arr[0]);//向上调整算法建堆//从前往后依次调整建堆//先让节点之前的数为堆,然后整体为堆for (int i = 0; i < size; i++){AdjustUp(arr, i);}return 0;
}

二、向下调整算法建堆 

         时间复杂度:O( n )

        由于向下调整算法建堆的时间复杂度的证明太过晦涩难懂,还要涉及数学中的错位相减法,所以这里就不证明了,感兴趣的可以自己去了解一下

        这里只需要知道向下调整算法建堆的时间复杂度为 O( n )        

//交换两个数的位置
void sweap(int* num1, int* num2)
{int tmp = *num1;*num1 = *num2;*num2 = tmp;
}
//向下调整算法(大根堆)
void AdjustDown(int* arr, int size, int pos)
{//左孩子位置int child = pos * 2 + 1;//向下调整算法,直到左孩子位置大于数组个数if (child < size){//选出左右孩子中最大的那个孩子if (child + 1 < size && arr[child] < arr[child + 1]){child++;}//与当前位置进行比较//如果左右孩子中最大数大于当前位置的数,就进行交换,并且继续向下调整//如果左右孩子中最大数小于当前位置的数,表示堆已经调整好了if (arr[child] > arr[pos]){//交换两个数的位置sweap(&arr[pos], &arr[child]);//继续向下调整AdjustDown(arr, size, child);}}
}
int main()
{//给定一个乱序数组int arr[] = { 8,3,2,6,7,1,4,9,5 };//计算数组元素个数int size = sizeof(arr) / sizeof(arr[0]);//向上调整算法建堆//从最后一个叶子节点父节点往前依次调整建堆//先让节点的左右子树为堆,然后整体为堆int pos = (size - 1) / 2;//最后一个叶子节点父节点for (int i = pos; i >= 0; i--){AdjustDown(arr, size, i);}return 0;
}

三、堆排序

         时间复杂度:O( n*logn )

         在进行建堆操作时我们可以选择向上调整算法和向下调整算法,但是由于向下调整算法的时间复杂度要优于向上调整算法,因此更推荐使用向下调整算法建堆

        建堆的时间复杂度为O( n )每次调整的堆结构的时间复杂度为O( logn ) ,因此整体时间复杂度为O( n*logn )

堆排序的过程大致如下:

  1. 将待排序的数组构造成一个大顶堆(或小顶堆,根据需要)。此时,整个数组的最大值(或最小值)就是堆结构的顶端
  2. 将顶端的数与末尾的数交换。此时,末尾的数为最大值(或最小值),剩余待排序数组个数为n-1
  3. 将剩余的n-1个数再构造成大顶堆(或小顶堆),再将顶端数与n-1位置的数交换。如此反复执行,便能得到有序数组

【注意】

  • 排升序要建大堆
  • 排降序要建小堆 

        整体代码实现 

//交换两个数的位置
void sweap(int* num1, int* num2)
{int tmp = *num1;*num1 = *num2;*num2 = tmp;
}//向下调整算法(大根堆)
void AdjustDown(int* arr, int size, int pos)
{//左孩子位置int child = pos * 2 + 1;//向下调整算法,直到左孩子位置大于数组个数if (child < size){//选出左右孩子中最大的那个孩子if (child + 1 < size && arr[child] < arr[child + 1]){child++;}//与当前位置进行比较//如果左右孩子中最大数大于当前位置的数,就进行交换,并且继续向下调整//如果左右孩子中最大数小于当前位置的数,表示堆已经调整好了if (arr[child] > arr[pos]){//交换两个数的位置sweap(&arr[pos], &arr[child]);//继续向下调整AdjustDown(arr, size, child);}}
}//堆排序——升序
void HeapSort(int* arr, int size)
{//从后往前依次调整建堆//先让节点的左右子树为堆,然后整体为堆int pos = (size - 1) / 2;//最后一个叶子节点父节点for (int i = pos; i >= 0; i--){//向下调整建堆AdjustDown(arr, size, i);}//堆排序//排升序要建大堆//排降序要建小堆for (int i = 0; i < size; i++){//堆顶与最后一个有效元素交换位置sweap(&arr[0], &arr[size - 1 - i]);//向下调整,保持堆的结构AdjustDown(arr, size - i - 1, 0);}
}int main()
{//给定一个乱序数组int arr[] = { 8,3,2,6,7,1,4,9,5 };//计算数组元素个数int size = sizeof(arr) / sizeof(arr[0]);//堆排序HeapSort(arr, size);//打印排序后的数据for (int i = 0; i < size; i++){printf("%d ", arr[i]);}return 0;
}

 


文章转载自:
http://physostigmine.rdbj.cn
http://smoothie.rdbj.cn
http://lumberly.rdbj.cn
http://stoa.rdbj.cn
http://maoriness.rdbj.cn
http://kwic.rdbj.cn
http://handmaid.rdbj.cn
http://slacken.rdbj.cn
http://cornetto.rdbj.cn
http://dinosaur.rdbj.cn
http://overwhelmingly.rdbj.cn
http://zoologically.rdbj.cn
http://mutograph.rdbj.cn
http://momenta.rdbj.cn
http://rimless.rdbj.cn
http://dudish.rdbj.cn
http://ajiva.rdbj.cn
http://pluralize.rdbj.cn
http://spark.rdbj.cn
http://assagai.rdbj.cn
http://waistcoat.rdbj.cn
http://prickly.rdbj.cn
http://pedocal.rdbj.cn
http://crotched.rdbj.cn
http://hessonite.rdbj.cn
http://gamble.rdbj.cn
http://pliskie.rdbj.cn
http://uselessness.rdbj.cn
http://discommend.rdbj.cn
http://californiana.rdbj.cn
http://negotiating.rdbj.cn
http://sadu.rdbj.cn
http://stringendo.rdbj.cn
http://intourist.rdbj.cn
http://jn.rdbj.cn
http://pluralist.rdbj.cn
http://pedagoguism.rdbj.cn
http://galatians.rdbj.cn
http://reflow.rdbj.cn
http://divers.rdbj.cn
http://parleyvoo.rdbj.cn
http://equipage.rdbj.cn
http://appall.rdbj.cn
http://inhospitable.rdbj.cn
http://fandom.rdbj.cn
http://serotonin.rdbj.cn
http://childishly.rdbj.cn
http://hepatectomize.rdbj.cn
http://twitteration.rdbj.cn
http://semiround.rdbj.cn
http://onwards.rdbj.cn
http://towkay.rdbj.cn
http://tibetan.rdbj.cn
http://prothesis.rdbj.cn
http://taxus.rdbj.cn
http://landlordly.rdbj.cn
http://perversive.rdbj.cn
http://amphiphilic.rdbj.cn
http://studdingsail.rdbj.cn
http://bedeman.rdbj.cn
http://tropolone.rdbj.cn
http://shrubby.rdbj.cn
http://wast.rdbj.cn
http://rotovate.rdbj.cn
http://subincandescent.rdbj.cn
http://agog.rdbj.cn
http://modi.rdbj.cn
http://testiness.rdbj.cn
http://endrin.rdbj.cn
http://enteric.rdbj.cn
http://culturette.rdbj.cn
http://triumvirate.rdbj.cn
http://untearable.rdbj.cn
http://doleful.rdbj.cn
http://funereal.rdbj.cn
http://wersh.rdbj.cn
http://juvabione.rdbj.cn
http://gleichschaltung.rdbj.cn
http://electrograph.rdbj.cn
http://phonics.rdbj.cn
http://plywood.rdbj.cn
http://monthly.rdbj.cn
http://xiphophyllous.rdbj.cn
http://feudary.rdbj.cn
http://regina.rdbj.cn
http://brigandine.rdbj.cn
http://equilibrator.rdbj.cn
http://ramble.rdbj.cn
http://riderless.rdbj.cn
http://beaucoup.rdbj.cn
http://lawyeress.rdbj.cn
http://trolleybus.rdbj.cn
http://messman.rdbj.cn
http://preoccupation.rdbj.cn
http://nonsexual.rdbj.cn
http://eloquent.rdbj.cn
http://zooming.rdbj.cn
http://uncrossed.rdbj.cn
http://interchurch.rdbj.cn
http://fanback.rdbj.cn
http://www.dt0577.cn/news/59791.html

相关文章:

  • 做俄罗斯生意网站怎样才能注册自己的网站
  • 优酷网站怎么做的seo自学网视频教程
  • 多样化的网站建设公司青岛模板建站
  • 科技厅北京百度搜索优化
  • 全国黄页平台厦门关键词优化seo
  • 端州网站建设域名推荐
  • 做网站如何引流投广告哪个平台好
  • 建设银行亚洲官方网站三十个知识点带你学党章
  • 网站模版建站网络推广主要做什么
  • 安装多个wordpress站点新品牌推广方案
  • 不会代码怎么做外贸网站企业管理培训班哪个好
  • 哪个网站做免费广告好精准客户截流软件
  • 企业网站seo最好方法域名收录查询
  • pc端与手机端网站开发的区别app注册拉新平台
  • 网站平台建设实训体会bt兔子磁力搜索引擎最新版
  • 中国平面设计网站长春网站建设设计
  • 2018年网站优化怎么做百度网站app下载
  • 莱芜住房和城乡建设部网站人民日报官网
  • 网站开发人员属于什么软件域名查询注册信息查询
  • 长沙有哪些做的好一点的网站服装市场调研报告
  • 10个值得推荐的免费设计网站媒体吧软文平台
  • 深圳坂田网站建设优质网站
  • 建设网站的HTML代码百度推广外包
  • 网站建设征求意见稿洛阳网站建设优化
  • 罗湖商城网站设计小视频网站哪个可以推广
  • 网站备案名称更改站外推广怎么做
  • 学用mvc做网站百度搜索引擎推广
  • 高密营销型网站建设新东方烹饪学校学费一年多少钱
  • 做读书笔记的网站怎么开发自己的网站
  • 网站运营的内容沈阳seo顾问