第k大的数
Posted lxzbky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第k大的数相关的知识,希望对你有一定的参考价值。
排序的方法就不说了
这里记录一下o(n)复杂度的算法
思想,利用快速排序的划分思想,每一次划分会有一个元素处于最终位置
判断这个位置,若所处位置大于k,则向左边寻找
若所处位置大于k,向右边寻找。
int find_K(int a[],int left, int right,int K) { if(left==right) return a[left]; if(left<right) { int pos = middle_partition(a,left,right); if(pos+1==K) return a[pos]; else if(pos+1<K){ return find_K(a,pos+1,right,K); }else{ return find_K(a,left,pos-1,K); } } }
这里犯了个错误,递归边界的问题。
所用到的划分算法为
int middle_partition(int A[],int left,int right) { int middle = A[left]; while(left<right) { while(left<right&&A[right]>=middle) right--; A[left]=A[right]; while(left<right&&A[left]<=middle) left++; A[right]=A[left]; } A[left]=middle; return left; }
以上是关于第k大的数的主要内容,如果未能解决你的问题,请参考以下文章