#pragma once
#include<iostream>
#include<assert.h>
#include<vector>
using namespace std;
class _Heap
{
public:
_Heap()
{
}
_Heap(int *a,int n)
{
//建大堆
for(int i = (n-2)/2; i >= 0; i--)
_AdjustDown(a,i,n);
}
void _HeapSort(int *a,int n)
{
while(n > 0)
{
swap(a[0],a[n-1]);
n--;
_AdjustDown(a, 0, n);
}
/* for(int i = 0;i<n;++i)
{
swap(a[0],a[n-1-i])
}*/
}
void print(int *a,int n)
{
for(int i = 0;i < n;i++)
{
cout<<a[i]<<" ";
}
cout <<endl;
}
public:
void _AdjustDown(int *a,int parent,int n)
{
int child = parent*2+1;
while (child < n)
{
if(child+1<n&&a[child]<a[child+1])
{
child++;
}
if(a[parent] < a[child])
{
swap(a[parent],a[child]);
parent = child;
child = parent*2+1;
}
else
break;
}
}
protected:
};
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布