基于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
原创粉丝点击