基于visual Studio2013解决算法导论之017查找第n小元素
来源:互联网 发布:淘宝企业店铺收费吗 编辑:程序博客网 时间:2024/06/07 03:22
题目
查找第n小元素
解决代码及点评
#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");}void Swap(int *p1, int *p2){int nTmp = *p1;*p1 = *p2;*p2 = nTmp;}int Partition(int *pnArr, int nLeft, int nRight){int nKey = nRight;int i = nLeft - 1;for (int j = nLeft; j < nRight; j++){if (pnArr[j] <= pnArr[nKey]){i++;Swap(&pnArr[i], &pnArr[j]);}}Swap(&pnArr[i+1], &pnArr[nKey]);return i+1;}int RandomPartiton(int *pnArr, int nLeft, int nRight){srand(time(NULL));int i = rand()%(nRight - nLeft + 1) + nLeft;Swap(&pnArr[i], &pnArr[nRight]);return Partition(pnArr, nLeft, nRight);}//i 第i小元素int RandomSelect(int *pnArr, int nLeft, int nRight, int i){if (nLeft == nRight){return pnArr[nLeft];}//寻找一个nTmpPos下标,nTmpPos左边的值都小于它,右边的值都大于它int nTmpPos = RandomPartiton(pnArr, nLeft, nRight);int nLCount = nTmpPos - nLeft + 1;if (nLCount == i){return pnArr[nTmpPos];}else if (i < nLCount){return RandomSelect(pnArr, nLeft, nTmpPos - 1, i);}else{return RandomSelect(pnArr, nTmpPos + 1, nRight, i - nLCount);}}int main(){int nArr[10] = {0,2,1,3,5,6,9,7,4,12}; PrintArr(nArr, 10);printf("第5最小元素的值为%d\n", RandomSelect(nArr, 0, 9, 5));system("pause");return 0;}
代码下载及其运行
代码下载地址:http://download.csdn.net/detail/yincheng01/6858815
解压密码:c.itcast.cn
下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:
1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果
0 0
- 基于visual Studio2013解决算法导论之017查找第n小元素
- 基于visual Studio2013解决算法导论之015第二小元素
- 基于visual Studio2013解决算法导论之016查找最大值最小值
- 基于visual Studio2013解决算法导论之030二叉查找树
- 基于visual Studio2013解决算法导论之001插入排序
- 基于visual Studio2013解决算法导论之002归并排序
- 基于visual Studio2013解决算法导论之003雇佣问题
- 基于visual Studio2013解决算法导论之012计数排序
- 基于visual Studio2013解决算法导论之013基数排序
- 基于visual Studio2013解决算法导论之020单链表
- 基于visual Studio2013解决算法导论之026二叉树
- 基于visual Studio2013解决算法导论之027hash表
- 基于visual Studio2013解决算法导论之042单源最短路径
- 基于visual Studio2013解决算法导论之047赫夫曼编码
- 基于visual Studio2013解决算法导论之048红黑树
- 基于visual Studio2013解决算法导论之051区间树
- 基于visual Studio2013解决算法导论之052深度优先
- 基于visual Studio2013解决算法导论之055拓扑排序
- 手机自动休眠与距离感应器失效的问题
- Android 通用获取IP的方法
- c语言学习2
- MAC 地址格式 解说
- WAMP环境下 的 Zend Framework 配置
- 基于visual Studio2013解决算法导论之017查找第n小元素
- 呼叫器连线乘务员可服务重点旅客
- oracle教程之oracle数据库的启动过程
- HashMap源码分析
- hadoop新手学习线路指南
- shiro 标签使用(一)
- 根据指定的日期字符串获取星期几
- Android游戏开发中通过音量键调节游戏声音
- ajax+json异步分页。