#每日一题#网易2016实习研发工程师笔试题
来源:互联网 发布:种子在线观看软件 编辑:程序博客网 时间:2024/06/10 06:28
问题描述:有一个整数数组,请你根据快速排序的思路,找出数组中第k大的数。
给定一个整数数组a,同时给定它的大小n和要找的k(k在1到n之间),请返回第k大的数,保证答案存在。
测试样例:
【1,3,5,2,2】,5,3
返回:2
根据题目的要求:我们利用快速排序的思路,递归时要对于k与i的值进行对比。
下面给出具体的代码:
#include <stdio.h>#include <stdlib.h>#include <strings.h>//寻找第k大的数int quicksortk(int *a,int left,int right,int k){ int i = left; int j = right; int x = a[left]; if(left < right){ while(i < j){ for(;j > i && a[j] < x;j--); if(j > i){ a[i++] = a[j]; } for(;i < j && a[i] > x;i++); if(i < j){ a[j--] = a[i]; } } a[j] = x; if(k == j){ return i; }else if(k > j){ //右递归 quicksortk(a,j + 1,right,k); }else{ //左递归 quicksortk(a,left,j - 1,k); } }}
测试程序:
int main(int argc,char**argv){ int n; int *a = NULL; int i; int k; int value; while(1){ printf("请输入数组的长度n:(-1 quit)\n"); scanf("%d",&n); if(n == -1){ printf("error!!\n"); exit(1); } a = (int *)malloc(sizeof(int) * n); bzero(a,sizeof(int) * n); printf("请输入数组元素:\n"); for(i = 0;i < n;i++){ scanf("%d",a + i); } printf("请输入k的值:\n"); scanf("%d",&k); value = quicksortk(a,0,n - 1,k - 1); printf("第%d大的数:%d\n",k,a[value]); printf("\n"); free(a); } return 0;}
其执行结果:
其实这样的笔试题算是比较基础的东西,革命尚未成功,同志仍需努力!!!! 在编程之美那本书上也有过类似的问题,只不过它要求寻找的是最大的k个数,在后面的博客中会对于这个问题进行具体的说明的。。。。
0 0
- #每日一题#网易2016实习研发工程师笔试题
- 网易2016 实习研发工程师编程题
- 网易2016实习研发工程师编程题
- 网易2016实习研发工程师编程题
- 网易2016研发工程师笔试题
- 网易 2016 实习研发工程师 3道 编程题
- 牛客网之网易2016实习研发工程师编程题
- 比较重量----网易2016实习研发工程师编程题
- 二叉树 网易2016实习研发工程师编程题
- #每日一题#腾讯研发工程师笔试题
- 网易2016实习研发笔试
- 2016百度C++研发工程师实习招聘笔试题
- 网易2016研发工程师笔试题(二)
- 数字游戏----网易2016研发工程师笔试题(二)
- 网易2016实习研发工程师选择题【解析】
- 算法题 13:二叉堆(网易2016实习研发工程师)
- 网易2016实习研发工程师编程题——寻找第K大
- 2012百度笔试题 - 实习软件研发工程师
- 记录MAVEN构建hadoop
- Xcode重构功能怎么用我全告诉你
- 心灵鸡汤之20160331
- anchorPoint
- 定时关机
- #每日一题#网易2016实习研发工程师笔试题
- 核心动画的结构
- 第五周项目二游戏中的角色类2
- 第五周项目 1-三角形类雏形
- UML类图几种关系的总结(收藏)
- CAlayer的疑惑
- CodeForces 632C The Smallest String Concatenation
- 我要写代码——跨过程序员的门槛(3)
- 年龄(穷举法)