#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<list>
#include<float.h>
#include <regex>
#include <string>
#include <fstream>
using namespace std;
#define max 100;
template<typename data> // 最小堆
struct Heap
{
vector<data> v;
int size;
int left(int i) {
return 2*i + 1;
}
int right(int i ){
return 2*i + 2;
}
void keepmin(int i) {
int min;
int l = left(i);
int r = right(i);
if (l < size && v[l] < v[i])
{
min = l;
}else
{
min = i;
}
if (r < size && v[r] < v[min])
{
min = r;
}
if (min != i)
{
swap(v[i],v[min]);
keepmin(min);
}
}
void buildHeap(vector<data> a) {
if (v.size()!=0)
{
v.clear();
}
for (auto &&i : a)
{
v.push_back(i);
}
size = a.size() ;
for (int i = a.size()/2; i >=0; i--)
{
keepmin(i);
}
}
void reheapSort(vector<data> a) {
//逆序
buildHeap(a);
for (auto &&i : v)
{
cout<<i<<endl;
}
for (int i = v.size()-1; i >= 1; i--)
{
swap(v[0],v[i]);
size--;
keepmin(0);
}
}
vector<data> heapSort(vector<data> a) {
//正序
reheapSort(a);
vector<data> vv;
for (int i = a.size() - 1; i >= 0; i--)
{
vv.push_back(v[i]);
}
return vv;
}
int par(int i ){
return (i-1)/2 ;}
void up(int i ) // 上移
{
int p = par(i)
图论基本算法c++实现
最新推荐文章于 2024-09-27 08:00:44 发布
本文详细介绍了如何使用C++编程语言实现图论的基本算法,包括遍历、搜索和最短路径等关键操作,旨在帮助程序员深入理解图数据结构及其在实际问题中的应用。
摘要由CSDN通过智能技术生成