Tassos icon

heapides !! :D :D :{

Tassos | PRO | 02/04/15 10:05:22 PM UTC | 0 ⭐ | 434 👁️ | Never ⏰ | []
C++ |

2.01 KB

|

None

|

0 👍

/

0 👎

#include <iostream>
 
#include <conio.h>
 
using namespace std;
 
void max_heapify(int *a, int i, int n)
/*
a : ο πίνακας.
i : κάποιο στοιχείο από την μέση του πίνακα και κάτω.
n : το πλήθος των στοιχείων όλου του πίνακα.
*/
{
 
int aristero_pedi, temp;
 
temp = a[i]; /* παίρνει το εκάστοτε στοιχείο κάτω από την μέση του πίνακα..*/
 
aristero_pedi = 2*i; /* */
 
while (aristero_pedi <= n)
 
    {
 
    if (aristero_pedi < n && a[aristero_pedi+1] > a[aristero_pedi]) /* κατι.. ΚΑΙ ..το δεξί φύλο να είναι πιο μεγαλό από το αριστερό */
        aristero_pedi = aristero_pedi+1; /* */
 
    if (temp > a[aristero_pedi])
        break;
 
    else if (temp <= a[aristero_pedi])
        {
        a[aristero_pedi/2] = aaristero_pedi];
        aristero_pedi = 2*aristero_pedi;
        }
 
    }
 
a[aristero_pedi/2] = temp;
 
return;
 
}
 
 
void heapsort(int *a, int n)
 
    {
 
        int i, temp;
 
        for (i = n; i >= 2; i--)
 
        {
 
            temp = a[i];
 
            a[i] = a[1];
 
            a[1] = temp;
 
            max_heapify(a, 1, i - 1);
 
        }
 
    }
 
 
 
 
void build_maxheap(int *a, int n)
/* n : πλήθος στοιχείων.
  a* : δείκτης στον πίνακα. */
 
{
int i;
 
for(i = n/2; i >= 1; i--)
/* i = με το μέσο του πίνακα & πάρε τον πίνακα από την μέση και κάτω.. */
/* δηλαδή πάμε στους γονέες..*/
    {
    max_heapify(a, i, n);
    }
}
 
 
 
 
 
 
int main()
 
{
 
int n, i, x;
 
cout<<"Πόσα στοιχεία θες να βάλεις στον πίνακα ; \n";
 
cin>>n;
 
int a[20];
 
for (i = 1; i <= n; i++)
 
    {
 
    cout<<"Δώσε το στοχείο  "<< (i) <<endl;
 
    cin>>a[i];
 
    }
 
build_maxheap(a,n);
 
heapsort(a, n);
 
cout<<"sorted output\n";
 
for (i = 1; i <= n; i++)
 
{
 
cout<<a[i]<<endl;
 
}
 
getch(); 
 
    }

Comments