基于visual Studio2013解决面试题之1207堆排序

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               



题目



解决代码及点评

  1.   
  1.   
  1. <code class="language-cpp">/* 
  2.     堆排序 
  3. */  
  4.   
  5. #include <stdio.h>  
  6. #include <stdlib.h>  
  7. #include <malloc.h>  
  8. #include <time.h>  
  9.   
  10. void PrintArr(int *pnArr, int nLen)  
  11. {  
  12.     for (int i = 0; i < nLen; i++)  
  13.     {  
  14.         printf("%d ", pnArr[i]);  
  15.     }  
  16.     printf("\n");  
  17. }  
  18.   
  19. //返回i父节点下标  
  20. int Parent(int i)  
  21. {  
  22.     return (i - 1) / 2;  
  23. }  
  24.   
  25. //返回i左孩子下标  
  26. int LeftChild(int i)  
  27. {  
  28.     return i * 2 + 1;  
  29. }  
  30.   
  31. //返回i右孩子下标  
  32. int RightChild(int i)  
  33. {  
  34.     return i * 2 + 2;  
  35. }  
  36.   
  37. void Swap(int *a, int *b)  
  38. {  
  39.     int nTmp = *a;  
  40.     *a = *b;  
  41.     *b = nTmp;  
  42. }  
  43. void MaxHeapify(int *pnArr, int nLen, int i)  
  44. {  
  45.     int LChild = LeftChild(i);  
  46.     int RChild = RightChild(i);  
  47.     int nMaxPos;  
  48.     if (LChild < nLen && pnArr[LChild] > pnArr[i])  
  49.     {  
  50.         nMaxPos = LChild;  
  51.     }  
  52.     else  
  53.     {  
  54.         nMaxPos = i;  
  55.     }  
  56.     if (RChild < nLen && pnArr[RChild] > pnArr[nMaxPos])  
  57.     {  
  58.         nMaxPos = RChild;  
  59.     }  
  60.   
  61.     if (nMaxPos != i)  
  62.     {  
  63.         Swap(&pnArr[nMaxPos], &pnArr[i]);  
  64.         MaxHeapify(pnArr, nLen,nMaxPos);  
  65.     }  
  66.   
  67. }  
  68. void BuildMaxHeap(int *pnArr, int nLen)  
  69. {  
  70.     for (int i = Parent(nLen -1); i >= 0; i--)  
  71.     {  
  72.         MaxHeapify(pnArr, nLen, i);  
  73.     }  
  74. }  
  75.   
  76. void HeapSort(int *pnArr, int nLen)  
  77. {  
  78.     BuildMaxHeap(pnArr, nLen);  
  79.     for (int i = nLen - 1; i > 0; i--)  
  80.     {  
  81.         Swap(&pnArr[i], &pnArr[0]);  
  82.         nLen--;  
  83.         MaxHeapify(pnArr, nLen, 0);  
  84.     }  
  85. }  
  86. int main()  
  87. {  
  88.     int nArr[10] = {4,1,3,2,16,9,10,14,8,7};  
  89.   
  90.     PrintArr(nArr, 10);  
  91.     HeapSort(nArr, 10);  
  92.   
  93.     PrintArr(nArr, 10);  
  94.     system("pause");  
  95.     return 0;  
  96. }</code>  
/* 堆排序*/#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <time.h>void PrintArr(int *pnArr, int nLen)for (int i = 0; i < nLen; i++) {  printf("%d ", pnArr[i]); } printf("\n");}//返回i父节点下标int Parent(int i)return (i - 1) / 2;}//返回i左孩子下标int LeftChild(int i)return i * 2 + 1;}//返回i右孩子下标int RightChild(int i)return i * 2 + 2;}void Swap(int *a, int *b)int nTmp = *a; *a = *b; *b = nTmp;}void MaxHeapify(int *pnArr, int nLen, int i)int LChild = LeftChild(i); int RChild = RightChild(i); int nMaxPos; if (LChild < nLen && pnArr[LChild] > pnArr[i]) {  nMaxPos = LChild; } else {  nMaxPos = i; } if (RChild < nLen && pnArr[RChild] > pnArr[nMaxPos]) {  nMaxPos = RChild; } if (nMaxPos != i) {  Swap(&pnArr[nMaxPos], &pnArr[i]);  MaxHeapify(pnArr, nLen,nMaxPos); }}void BuildMaxHeap(int *pnArr, int nLen)for (int i = Parent(nLen -1); i >= 0; i--) {  MaxHeapify(pnArr, nLen, i); }}void HeapSort(int *pnArr, int nLen){ BuildMaxHeap(pnArr, nLen); for (int i = nLen - 1; i > 0; i--) {  Swap(&pnArr[i], &pnArr[0]);  nLen--;  MaxHeapify(pnArr, nLen, 0); }}int main()int nArr[10] = {4,1,3,2,16,9,10,14,8,7}; PrintArr(nArr, 10); HeapSort(nArr, 10); PrintArr(nArr, 10); system("pause"); return 0;}

代码下载及其运行

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

解压密码:c.itcast.cn


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

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


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

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


程序运行结果








           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值