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

内蒙古自治区网站建设_网站建设公司_导航菜单_seo优化

网站建设的需要是什么,中文网站模板免费下载,四川省微信网站建设公,一个普通的网站做线上交易好吗1. 简述 假设待排序数组为 int array[], 数组长度为n。 主要是利用堆的性质。对于升序排序#xff0c;使用最大堆。 首先#xff0c;建堆#xff0c;使用递归后根序遍历得方法#xff0c;通过交换元素#xff0c;保证根元素比孩子元素大。 第1趟#xff0c;堆顶…1. 简述     假设待排序数组为 int array[], 数组长度为n。    主要是利用堆的性质。对于升序排序使用最大堆。    首先建堆使用递归后根序遍历得方法通过交换元素保证根元素比孩子元素大。    第1趟堆顶元素array[0]与array[n-1]交换保证array[n-1]的数值正确根据array[0]新的数值更新堆。    第2趟堆顶元素array[0]与array[n-2]交换保证array[n-2]的数值正确根据array[0]新的数值更新堆。    ···     第n-1趟堆顶元素array[0]与array[1]交换保证array[1]的数值正确根据array[0]新的数值更新堆。 2. 复杂度     平均时间复杂度为O(N*logN)空间复杂度为O(1)。 3. 代码    void make_heap(int array[], int n, int node) { // 自底向上构建堆  int left  2 * node 1;  int right  2 * node  2;  if(left  n-1) return;  else if(right  n-1) { // 堆是完全的二叉树所以此时不需要递归    if(array[node]  array[left]) {      swap(array[node], array[left]);    }  }  else {    make_heap(array, n, left);    make_heap(array, n, right);    if(array[node]  array[left]  array[right]  array[left]) {      swap(array[node], array[left]);    }    else if(array[node]  array[right]  array[left]  array[right]) {      swap(array[node], array[right]);    }  }}void update_heap(int array[], int n, int node) { // 自顶向下更新堆  int left  2 * n  1;  int right  2 * n  2;  if(left  n-1) return;  else if(right  n-1) {    if(array[node]  array[left])       swap(array[node], array[left]);  }  else {    if(array[node]  array[left]  array[right]  array[left]) {      swap(array[node], array[left]);      update_heap(array, n, left);    }    else if(array[node]  array[right]  array[left]  array[right]) {      swap(array[node], array[right]);      update_heap(array, n, right);    }  }}void heap_sort(int array[], int n) {  make_heap(array, n, 0);  for(int in; i1; i--) {    swap(array[i], array[0]);    update_heap(array, n, node);  } }     实际上堆的构建和更新都可以使用非递归的方式实现对于堆的构建需要首先找到最后一个有孩子的节点array[k]然后从array[k]一直更新到array[0]即可其中的kn/2。k的求法如下假设k存在2*k1n或者2*k2n对于第一种情况kn/2对于第二种情况kn/2-1。对于堆的更新就更简单了只要从array[0]开始选择一条通路一直向下更新直到没有孩子了为止。   值得注意的是对于下标从0开始的数组k号节点的孩子节点分别是2*k1和2*k2。 而对于下标从1开始得数组k号节点的孩子节点分别是2*k和2*k1。    堆排序属于选择排序实际上就是利用最大堆这个数据结构每次选择一个剩余元素中最大的元素交换到合适的位置上去。 4. 参考资料     维基百科-堆排序    http://en.wikipedia.org/wiki/Heapsort
http://www.ihoyoo.com/news/99836.html

相关文章:

  • 微网站 制作wordpress 上传文件功能
  • 广州 网站设计北京正规网站建设经历
  • 自己做提卡网站网站定制制作
  • 最新互联网项目平台网站中医科网站建设素材
  • 精通网站建设工资多少企业推广怎么写
  • 网站创建流程教程wordpress4开启xmlrpc
  • 中山网站制作公司wordpress js 页脚
  • 做环保网站案例精美网页布局
  • 如何在自己的网站上做友情链接wordpress后台美化
  • 淘掌门官方网站网站规划与建设步骤
  • 网站建设到运营需要多少钱网页内容
  • 企业 php网站建设网游开发成本
  • 成功的营销网站如何增加网站转化率
  • 网站首页大图的尺寸新乡网络科技有限公司
  • 外贸上哪个网站开发客户珠海做网站找哪家好
  • 西安网站建设孙正学帮做3d模型的网站
  • 谷城县城乡建设局网站设计方案包括哪几部分
  • 网站建设与制作企业wordpress php apache
  • 网站推广建设加盟苏州专业做网站较好的公司有哪些
  • 织梦网站反应速度慢国际物流公司
  • 基于cms设计网站的背景意义电子商务网站建设百度文库
  • 网站内容更新软件友链交易网
  • 网站开发源代码关于淘宝店网站建设的可行性报告
  • 网站开发流程分析什么装修网站做的好的
  • 企业网站基本信息早教德州市建设街小学官方网站
  • 川沙网站建设资讯类网站建设资质要求
  • 整站网站模板网站建设服务协议
  • 网站搭建代码国内最好景观设计公司排名
  • 关于网站建设的工作计划如何做网站首页的psd图
  • 阿里云网站模板 解析怎么弄公众号