#include <stdio.h>
int findPivotPos(int array[],int arrStart,int arrEnd){
return arrStart;
}
int partition(int array[],int arrStart,int arrEnd,int pivotPos){
int pivotValue=array[pivotPos];
array[pivotPos]=array[arrEnd-1];
int itPivotValueCount=0;
for (int i=arrStart, temp;i<arrEnd-1;i++){
if (array[i]<pivotValue){
temp=array[i];
array[i]=array[arrStart+itPivotValueCount];
array[arrStart+itPivotValueCount]=temp;
itPivotValueCount++;
}
}
array[arrEnd-1]=array[arrStart+itPivotValueCount];
array[arrStart+itPivotValueCount]=pivotValue;
return arrStart+itPivotValueCount;
}
void quickSort(int array[],int arrStart,int arrEnd){
if(arrEnd - arrStart < 2){
return;
}
int pivotPos = findPivotPos(array,arrStart,arrEnd);
int pivotOrderedPos = partition(array,arrStart,arrEnd,pivotPos);
quickSort(array,arrStart,pivotOrderedPos);
quickSort(array,pivotOrderedPos+1,arrEnd);
}
int quickSelect(int arr[], int low, int high, int k) {
if (low == high) {
return arr[low];
}
int pi = partition(arr, low, high,k);
if (pi == k - 1) {
return arr[pi];
} else if (pi < k - 1) {
return quickSelect(arr, pi + 1, high, k);
} else {
return quickSelect(arr, low, pi - 1, k);
}
}
void display(int array[],int arrLen){
for (int i=0;i<arrLen;i++){
printf("%d ",array[i]);
}
}
int main () {
int array[]={10,8,3,9,5,1,2,7,6,4};
int flag=quickSelect(array,0,sizeof(array)/sizeof(int),5);
printf("%d",flag);
return 0;
}