1
내 목표는 이항 힙을 생성하는 것입니다. 여기에 내가 지금 쓴 내 코드입니다 :이항 힙 구현
#include<iostream>
using namespace std;
void maxheapify(int a[],int length,int i)
{
int left=2*i;
int right=2*i+1;
int largest=i;
if(left<length && a[left]>a[largest])
{
largest=left;
}
if (right<length && a[right]>a[largest])
{
largest=right;
}
if(largest!=i)
{
int temp=a[i];
a[i]=a[largest];
a[largest]=temp;
maxheapify(a,length,largest);
}
}
void buildmax(int a[],int length)
{
for(int i=(length-1)/2;i>=0;i--)
{
maxheapify(a,length,i);
}
}
/*void heapsort(int a[],int length)
{
buildmax(a,length);
for(int i=length-1;i>0;i--)
{
int temp=a[i];
a[i]=a[0];
a[0]=temp;
maxheapify(a,i,0);
}
}
*/
void combine_heap(int a[],int n,int b[],int m,int c[])
{
}
int main()
{
int a[100];
int n=sizeof(a)/sizeof(a[0]);
int b[100];
int m=sizeof(b)/sizeof(b[0]);
int c[200];
int length=sizeof(a)/sizeof(a[0]);
for(int i=0;i<length;i++){
a[i]=34+rand()%(length-33);
b[i]=rand()%(i+1);
}
/*heapsort(a,length);*/
/*for(int i=0;i<length;i++)
cout<<a[i]<<" ";*/
return 0;
}
내가 사소한 솔루션은 세 번째로 두 개의 배열을 결합하고 buildmax 프로 시저를 호출하는 것입니다 생각,하지만 난 그것을 효율적이지 않습니다 생각, 내가 구현하기 위해 노력했다 위키 피 디아
내가 일반적으로 하위 트리에 액세스하는 방법을 때문에, 그것을 구현하는 방법을 잘 모릅니다function merge(p, q)
while not(p.end() and q.end())
tree = mergeTree(p.currentTree(), q.currentTree())
if not heap.currentTree().empty()
tree = mergeTree(tree, heap.currentTree())
heap.addTree(tree)
else
heap.addTree(tree)
heap.next() p.next() q.next()
있지만에서이 의사 코드는? 다른 변형은 우선 순위 큐를 구성하고 다른 배열에서 첫 번째 배열에서 다음 삽입 기능 삽입을 사용하는 것입니다 ,하지만이 최적의? 두 최대 힙을 효율적으로 하나로 결합하는 코드를 작성하는 데 도움이됩니다.
문제를 디버그하는 데 도움을 줄 수 있지만 대신 코드를 작성하지는 않습니다. 우리는 코드 작성 회사가 아닙니다. –
나를 위해 코드를 작성하지 말고, 쓰는 방법을 도와주세요. –
글쎄, 글을 쓰고 시험해 보셨습니까? –