class Solution
{
public:
int MaxDadandSons(vector<int>& nums,int i)
{
int j=2*i+1;
int k=2*i+2; //右子节点
if(k>=0 && k<=nums.size()-1)
return (nums[j]>=nums[k])? ((nums[j]>nums[i])?j:i):((nums[k]>nums[i])?k:i);
else if(j>=0 && j<=nums.size()-1)
return (nums[j]>nums[i])?j:i;
else
return i;
}
void adjustdown(vector<int>& nums,int i)
{
int j;
while(i!=(j=MaxDadandSons(nums,i)))
{
swap(nums[i],nums[j]);
i=j;
}
}
void heapify(vector<int>& nums)
{
int n=nums.size();
for(int i=(n-1)>>1;0<=i && i>=n-1;--i)
adjustdown(nums,i);
}
int delmax(vector<int>& nums)
{
int n=nums.size();
int max=nums[0];
nums[0]=nums[--n];
adjustdown(nums,0);
return max;
}
void HeapSort(vector<int>& nums)
{
int n=nums.size();
vector <int> num; //int n=nums.size();
//int num=new int[n];
heapify(nums);
while(!nums.empty())
num[--n]=delmax(nums);
nums(begin(num),end(num));
}
int findKthLargest(vector<int>& nums, int k)
{
HeapSort(nums);
return nums.at(nums.size()-k);
}
};