Divison and Recursion-find_kth_element
#include <iostream>
using namespace std;
void swap(int array[], int beginPos, int endPos){
int t = array[beginPos];
array[beginPos] = array[endPos];
array[endPos]=t;
}
int partition(int array[], int beginPos, int endPos){
int curVal = array[beginPos];
int headCursor = beginPos+1;
int tailCursor = endPos;
while(true){
while((array[headCursor] < curVal) && (headCursor < endPos)) headCursor++;
while(array[tailCursor] > curVal) tailCursor--;
if (headCursor>=tailCursor){break;}
swap(array, headCursor, tailCursor);
}
swap(array, beginPos, tailCursor);
return tailCursor;
}
int find_kth_element(int array[], int beginPos, int endPos, int k){
int curIndex = 0;
int curPos = 0;
curIndex = partition(array, beginPos, endPos);
curPos = curIndex - beginPos + 1;
if (curPos == k){return array[curIndex];}
else if(curPos > k){find_kth_element(array, beginPos, curIndex, k);}
else{find_kth_element(array, curIndex+1, endPos, k-curPos);}
}
int main(){
int array[7]={5,4,2,8,3,6,7};
for (int i = 0; i < 7; i++){
cout<<array[i]<<" ";
}
cout<<"find kth element:"<<find_kth_element(array, 0, 6, 5)<<endl;
return 1;
}

浙公网安备 33010602011771号