#include <iostream>
using namespace std;
int MniejszeDziecko(int rodzic,int rozmiarKopca,int kopiec)
{
int leweDziecko=2*rodzic;
int praweDziecko=2*rodzic+1;
if(leweDziecko>rozmiarKopca)
return 0;
if(praweDziecko>rozmiarKopca and kopiec[leweDziecko]<kopiec[praweDziecko])
return leweDziecko;
return praweDziecko;
}
void UsunKorzen(int rozmiar,int kopiec)
{
int rozmiarKopca=rozmiar+1;
int ostatni=kopiec[rozmiarKopca];
rozmiarKopca--;
int x=1;
int c=MniejszeDziecko(1,rozmiarKopca,kopiec);
while(c and kopiec[c]<ostatni)
{
kopiec[x]=kopiec[c];
x=c;
c=MniejszeDziecko(c,rozmiarKopca,kopiec);
}
kopiec[x]=ostatni;
}
int main()
{
const int rozmiar=7;
int kopiec[rozmiar+1]={0,2,5,3,7,6,4,5};
int tab[rozmiar]={0};
for(int i=0;i<rozmiar;i++)
{
tab[i]=kopiec[1];
UsunKorzen(rozmiar,kopiec);
}
for(int i=0;i<rozmiar;i++)
cout << tab[i] << " ";
return 0;
}
Napisałem tu algorytm usuwanie kopca. Kopiec indeksowany od 1 zapisany jest w tablicy kopiec. Program usuwa kopiec i zapisuje już wtedy posortowane dane do tablicy tab. Program jednak nie kompiluje się. Cały czas mam błąd error invalid types of int[int] for array subscipt? Ktoś wie o co chodzi?
and
i to Twojeat
jest dla mnie bolesne do czytania :P[``]
...and
działa? działa. jest w standardzie? jest. trochę to wbrew konwencji tylko.