C
codergem
The following code is for heap sort but its not working properly.
According to my analysis the Logic is correct but still its not showing
the correct output.
Thanks.
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
int n=10,s[10]={11,2,9,13,57,25,17,1,90,3},heapsize;
void swap(int a,int b)
{
int temp=s;
s=s[a];
s[a]=temp;
}
void keepheap(int i)
{
int l,r,p,q,t,largest,m;
l = 2*i;
r = 2*i + 1;
p = s[l];
q = s[r];
t = s;
if(l<=heapsize && p > t)
largest = l;
else
largest = i;
m = s[largest];
if(r<=heapsize && q > m)
largest = r;
if(largest != i)
{
swap(i, largest);
keepheap(largest);
}
}
void makeheap(int n)
{
heapsize=n;
for(int i=(n/2)-1; i>=1; i--)
keepheap(i);
}
void heapsort()
{
makeheap(n);
for(int i=n; i>=2; i--)
{
swap(1,i);
heapsize--;
keepheap(i);
}
}
According to my analysis the Logic is correct but still its not showing
the correct output.
Thanks.
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
int n=10,s[10]={11,2,9,13,57,25,17,1,90,3},heapsize;
void swap(int a,int b)
{
int temp=s;
s=s[a];
s[a]=temp;
}
void keepheap(int i)
{
int l,r,p,q,t,largest,m;
l = 2*i;
r = 2*i + 1;
p = s[l];
q = s[r];
t = s;
if(l<=heapsize && p > t)
largest = l;
else
largest = i;
m = s[largest];
if(r<=heapsize && q > m)
largest = r;
if(largest != i)
{
swap(i, largest);
keepheap(largest);
}
}
void makeheap(int n)
{
heapsize=n;
for(int i=(n/2)-1; i>=1; i--)
keepheap(i);
}
void heapsort()
{
makeheap(n);
for(int i=n; i>=2; i--)
{
swap(1,i);
heapsize--;
keepheap(i);
}
}