题目

解决代码及点评

/*最大堆是一个数组数据结构,任意一个下标i,它的值大于i*2和i*2+1的值(i从1开始)当这样的堆形成时,最大值在数组最开始的位置。当这样的堆形成后,将第一个元素交换到最后,并在剩余的数据中再调整堆,形成新的堆如此反复完成排序
*/#include <iostream>using namespace std;void swap(int *a, int *b)
{int temp;temp = *a;*a = *b;*b = temp;
}/*堆调整函数,i表示需要调整的下标size表示堆长度最大堆的要求是i的值大于i*2的值和i*2+1的值
*/
void heap_adjust(int *a, int i, int size)
{int lchild = 2 * i;int rchild = 2 * i + 1;int max = i;if (i <= size / 2) //大于size/2的为叶子节点,不需要调整{if (lchild <= size && a[lchild] > a[max])max = lchild;if (rchild <= size && a[rchild] > a[max])max = rchild;if (max != i){swap(&a[i], &a[max]);heap_adjust(a, max, size); //依此调整下面的子树,为了防止交换之后不满足堆的性质}}
}/*创建堆就是调整堆的过程
*/
void create_heap(int *a, int size)
{int i = 0;for (i = size / 2; i >= 1; i--)heap_adjust(a, i, size);
}/*堆排序a存放数组size表示长度,注意,数据是从下标[1, size]
*/
void heap_sort(int *a, int size)
{int i = 0;int temp = 0;// 创建最大堆create_heap(a, size);for (i = size; i >= 1; i--){// 把第一个值,交换到最后去,最大堆里,第一个值是最大的// 把它交换到最后的位置,相当于已经有一个数据排序好了swap(&a[i], &a[1]);// 交换之后堆就被破坏了// 那么需要对除了最后一个元素外的其他元素进行堆调整// 形成新的最大堆,如此循环完成排序heap_adjust(a, 1, i - 1);}
}int main(int argc, char **argv)
{int a[100];int size = 0;cout << "堆个数:";// 输入堆中数值个数while (scanf_s("%d", &size) == 1 && size > 0){int i = 0;// 从键盘输入数值,并保存在数组for (i = 1; i <= size; i++)scanf_s("%d", &a[i]);// 在数组上进行堆排序,注意下标是从1开始到size,下标为0的值没有用// 主要是为了方便计算heap_sort(a, size);// 打印排序结果for (i = 1; i <= size; i++)printf("%d ", a[i]);}return 0;
}

代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn

下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”

2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行

程序运行结果






转载于:https://www.cnblogs.com/niulanshan/p/6175170.html

基于visual Studio2013解决面试题之0209最大堆排序相关推荐

  1. 基于visual Studio2013解决面试题之0901奇偶站队

     题目 解决代码及点评 /*给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数 解决方法:两边同时遍历,如果遇到左边偶数或者右边基数,则交换 */#include <ios ...

  2. 基于visual Studio2013解决面试题之0403串联字符串

     题目 解决代码及点评 /*有 n个长为 m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环 ...

  3. 基于visual Studio2013解决面试题之0804复杂链表

     题目 解决代码及点评 /*复杂链表的拷贝,现在有一个复杂链表,完成一个clone函数拷贝一个链表复杂链表是指struct Node{struct Node* _next;struct Node ...

  4. 基于visual Studio2013解决面试题之1002公共子串

     题目 解决代码及点评 /*求两个字符串的最小公共子串这道题简单的两个字符串遍历即可 */#include <iostream> using namespace std; const ...

  5. 基于visual Studio2013解决面试题之1007鸡蛋和篮子

     题目 解决代码及点评 /*n个鸡蛋放m个篮子,篮子不能为空,有多少种方法 */#include <iostream> using namespace std; const int ...

  6. 基于visual Studio2013解决面试题之0601二叉树深度

     题目 解决代码及点评 /*求二叉树深度 */#include <iostream> #include <stack> using namespace std;templ ...

  7. 基于visual Studio2013解决面试题之0402合并升序链表并去重

     题目 解决代码及点评 /*两个升序链表合并,并要求去掉重复元素 */ #include <iostream> using namespace std;class LinkNode ...

  8. 基于visual Studio2013解决面试题之0802数字最多元素

     题目 解决代码及点评 /*查找数组中超过一半的那个元素方法1:每次删除数组中一对不相同的value,最后剩下都是想通的数字时,就是超过一半的那个元素了方法2:排序后,取中间元素即可 */#in ...

  9. 基于visual Studio2013解决面试题之0807strstr函数

     题目 解决代码及点评 /*写strstr函数简单的遍历去查找吧 */#include <iostream> #include <stdio.h>const char * ...

最新文章

  1. 模板引擎:VelocityFreeMarker(转)
  2. 十二张图详解Redis的数据结构和对象系统
  3. SQL中varchar和nvarchar有什么区别?
  4. nginx的反向代理以及负载均衡模块的使用
  5. 轻松学习JavaScript十七:JavaScript的BOM学习(二)
  6. java生成密码_java生成密码生成 | 学步园
  7. 键盘显示影响布局的解决方法
  8. java ioc_Java体验IOC
  9. 连续获两家乘用车前向定点, 又一家国产毫米波雷达企业欲“赶超”外资巨头
  10. java进销存--商品管理
  11. F - 悼念512汶川大地震遇难同胞
  12. IIR滤波器设计之冲激响应不变法与双线性变换法
  13. 那些年我们一起手写过的单例
  14. 关于php内部编码与mysql字符差异问题的研究
  15. Exchange报错:452 4.3.1 Insufficient system resources
  16. 不懂DVC6200调试请看这里
  17. hive修改字段及字段类型
  18. 神经内分泌肿瘤治疗新进展,神经内分泌肿瘤进展
  19. 高端优雅简历模板打包下载(附找工作指南)
  20. 4 前端 溢出 定位 模态框 透明度 JavaScript简介

热门文章

  1. 网众无盘服务器 快车挂盘失败 显示 当前磁盘已经为超级工作站模式,网众无盘超级工作站的一些经验总结...
  2. python字典程序题_python字典练习题
  3. linux下安装libsvm_Linux下libsvm的安装及简单练习
  4. go操作网页元素_UI自动化21heliumS元素定位方式
  5. php百分比乘加,用php简单实现加减乘除计算器
  6. python中国余数定理_Python实现的中国剩余定理算法示例
  7. git 在拉取代码的时候connect 谷歌报错_工具 | 手把手教你在VSCode中使用Git
  8. 杭州中国移动java待遇_【中国移动杭州研发中心Java面试】移动杭研社招java中级面试-看准网...
  9. c++ gets()、scanf() 、getline()、cin读取字符、字符串
  10. java 执行cmd 堵塞_java中调用cmd命令被阻塞无法返回和继续执行