标签:code 方法 span art pre div 快速排序 复杂 ++
排序的方法就不说了
这里记录一下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; }
标签:code 方法 span art pre div 快速排序 复杂 ++
原文地址:https://www.cnblogs.com/lxzbky/p/12493706.html