存在一个一维数组
int a[10]={125,26,35,24,548,256,25,298,7852,11};
想用递归的方法求第k大元素,比如说k=4
如何求啊!
想的头大了也不知道啊
先用排序,后直接找K=4的数字。
这个需求,使用排序,然后通过找序号来获得目标是最好的,也就是荒野的呼唤 所说的方案。
一定要递归的话。。。有点大材小用,也有点浪费资源,但还是可以解决的。毕竟使用排序后,要改变数组中元素的顺序,而且,后续插入数据也必须有序的插入(否则必须再次排序)。
实现方案(我用C#写了,很久不用C了,有点怪怪的,好在C#也差不多的语法):
int GetValue(int[] array, int start, int count, int pos) { int result; if(count == pos) { result = array[start]; for(int i = start + 1; i < start + count; i++) { if(result < array[i]) { result = array[i]; } } } else { result = GetValue(array, start + 1, count - 1, pos); result = array[start] > result ? array[start] : result; } return result; }
思路就是这样,但在具体实现的时候,这个求值结果是有bug的。(希望你能找出其中的bug并加以修正。找出来应该不难,修正有点难度,一时半会也弄不出来,这里就抛砖引玉了)。
直接进行判断 当K值等于4的时候 推出递归不久可以了~!
看不懂上面的代码 建议使用冒泡排序。但是呢,冒泡会将整个数组排好,第一次个冒泡子过程得到最大数在列尾,第二次得到第二大的,第k次得到你要的了。只要排到第k次就OK。