堆排序

来源:互联网 发布:大数据职位 编辑:程序博客网 时间:2024/05/22 08:12

#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;
}

0 0
原创粉丝点击