#include<iostream>
#include<vector>
#include<random>
#include<time.h>
using namespace std;
void adjust(vector<float> &data, int length, int i)
{
int left = i * 2 + 1;
int right = i * 2 + 2;
int larger = i;
float tmp;
while (left <length || right <length)
{
if (data[larger] < data[left])
larger = left;
if (right<length &&data[larger] < data[right])
larger = right;
if (larger != i)
{
tmp = data[i];
data[i] = data[larger];
data[larger] = tmp;
i = larger;
left = 2 * i + 1;
right = 2 * i + 2;
}
else
break;
}
}
void build_heap(vector<float>& data, int length)
{
int root = length / 2 - 1;
for (int i = root; i >= 0; i--)
{
adjust(data, length, i);
}
}
void heap_sort(vector<float> &data, int length)
{
build_heap(data, length);
float ex_var;
int len;
for (int i = 0; i < length; i++)
{
ex_var = data[length - i - 1];
data[length - i - 1] = data[0];
data[0] = ex_var;
adjust(data, length - i - 1, 0);
}
}
int main()
{
srand((int)time(NULL));
vector<float>data(1000);
for (int i = 0; i < data.size(); i++)
{
data[i] = static_cast<float>(rand()%100)/100 + rand()%1000;
}
heap_sort(data, data.size());
return 0;
}