当前位置: 首页 > 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.lebaoying.cn/news/99836.html

相关文章:

  • 网站优化排名提升网络营销有必要学吗
  • 赤城seo网站优化排名电商平台都有哪些平台
  • 鲜花网站建设项目策 划书杭州企业seo网站优化
  • 免费网站建设工具免费做手机网站
  • .ent做的网站有哪些效益成本原则网站建设
  • 美团网站网站建设发展免费logo设计在线生成器官网
  • 云南做网站公司肇庆市网站建设
  • 网站建设费用价格明细表网站建设绿茶科技
  • 网站解除域名绑定网络销售怎么才能找到客户
  • 无棣网站制作php网站开发 pdf
  • 河北省网站快速备案公众号怎么推广
  • 网站开发成都vps 网站打不开
  • 微信订阅号不认证可以做网站吗在工行网站上如何做现金理财
  • 服装网站开发的需求分析网站必备功能
  • 凡科建站是不是免费的小红书搜索优化
  • 全屏的网站wordpress qq微信登陆地址修改密码
  • 丽水市住房和城建建设局网站php网页设计作业代码
  • 网站备案号如何获得免费打广告平台有哪些
  • 盐亭网站建设天津低价网站建设
  • 音乐网站建设成本网站建设个网站一般需要花多少钱
  • 建设部考试网站班级网站html代码
  • 网站建设的学习方法免费创建单页网站
  • 做网站的模版手机优化软件哪个好用
  • 网站盗号怎么做电销做网站的话术
  • 国外网站后台模板下载百色seo外包
  • 深圳科源建设集团有限公司网站济南市工程造价信息网
  • 暴雪公司windows优化大师卸载
  • 南京市建设发展集团有限公司网站wordpress vantage主题
  • 品牌网站建设坚持大蝌蚪简单个人网站制作
  • 公司网站做的好的公司什么网站比较吸引流量