#include <stdio.h>
void swap(int *a,int *b){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int arr[],int left,int right,int pivotIndex){
int storeIndex = left;
int pivotValue = arr[pivotIndex];
int i;
swap(&arr[pivotIndex],&arr[right]);
for(i=left;i<right;i++){
if(arr[i]>pivotValue){
swap(&arr[i],&arr[storeIndex]);
storeIndex++;
}
}
swap(&arr[storeIndex],&arr[right]);
return storeIndex;
}
int findKMax(int arr[],int left,int right,int k){
int nRet;
int pivotIndex = left + 1;
nRet = partition(arr,left,right,pivotIndex);
if(nRet < k){
return findKMax(arr,nRet+1,right,k);
}
else if(nRet > k){
return findKMax(arr,left,nRet-1,k);
}
return nRet;
}
int main(){
int i,k,nRet;
int arr[] = {8,3,4,1,9,7,6,10};
scanf("%d",&k);
nRet = findKMax(arr,0,7,k-1);
printf("The Kth Max Number locate in %d and the value is: %d\n",nRet,arr[nRet]);
for(i=0;i<8;i++){
printf("%3d ",arr[i]);
}
return 0;
}
void swap(int *a,int *b){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int arr[],int left,int right,int pivotIndex){
int storeIndex = left;
int pivotValue = arr[pivotIndex];
int i;
swap(&arr[pivotIndex],&arr[right]);
for(i=left;i<right;i++){
if(arr[i]>pivotValue){
swap(&arr[i],&arr[storeIndex]);
storeIndex++;
}
}
swap(&arr[storeIndex],&arr[right]);
return storeIndex;
}
int findKMax(int arr[],int left,int right,int k){
int nRet;
int pivotIndex = left + 1;
nRet = partition(arr,left,right,pivotIndex);
if(nRet < k){
return findKMax(arr,nRet+1,right,k);
}
else if(nRet > k){
return findKMax(arr,left,nRet-1,k);
}
return nRet;
}
int main(){
int i,k,nRet;
int arr[] = {8,3,4,1,9,7,6,10};
scanf("%d",&k);
nRet = findKMax(arr,0,7,k-1);
printf("The Kth Max Number locate in %d and the value is: %d\n",nRet,arr[nRet]);
for(i=0;i<8;i++){
printf("%3d ",arr[i]);
}
return 0;
}