#include <iostream>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
class Solution
{
public:
void heapSort(vector<int>& nums)
{
if(nums.size()<2) return;
for(int i=0;i<nums.size();i++)
{
heapInsert(nums,i);
}
int sizes=nums.size();
swap(nums[0],nums[--sizes]);
while(sizes>0)
{
heapify(nums,0,sizes);
swap(nums[0],nums[--sizes]);
}
}
private:
void heapify(vector<int>& nums,int index,int sizes)
{
int left=index*2+1;
while(left<sizes)
{
int largest=(left+1<sizes && nums[left+1]>nums[left])?left+1:left;
largest=nums[largest]>nums[index]?largest:index;
if(largest==index)
{
break;
}
swap(nums[index],nums[largest]);
index=largest;
left=index*2+1;
}
}
void heapInsert(vector<int>& nums,int index)
{
while(nums[index]>nums[(index-1)/2])
{
swap(nums[index],nums[(index-1)/2]);
index=(index-1)/2;
}
}
};
int main()
{
Solution ss;
for(int i=0;i<10;i++)
{
int len=20;
vector<int> nums;
vector<int> nums1;
for(int i=0;i<len;i++)
{
int x=rand()%101;
nums.push_back(x);
nums1.push_back(x);
cout<<x<<" ";
}
cout<<endl;
ss.heapSort(nums);
sort(nums1.begin(),nums1.end());
for(int i=0;i<nums.size();i++)
{
cout<<nums[i]<<" ";
if(nums[i]!=nums1[i])
{
cout<<endl<<"fuck bad error"<<endl;break;
}
}
cout<<endl;
}
return 0;
}