堆排序
来源:互联网 发布:大数据职位 编辑:程序博客网 时间: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;
}
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- LeetCode 210. Course Schedule II
- MySQL InnoDB引擎 MVCC并发控制
- Google Photos 会自动修正照片的白平衡了
- java基础学习(七)多态
- python django 集成已有的数据库
- 堆排序
- 蟠桃记
- 工具类的编写方式
- 最短路算法(转)
- xpath的使用
- 线段树的区间更新
- poj 1054The Troublesome Frog(几何——>dfs+剪枝)
- 卜踆哉数对
- Linux网络配置,与Windows共享,putty登录过慢