Algoritem na začetku v tabeli iz neurejenih elementov zgradi maksimalno kopico, nato pa se zamenjata koren kopice(največji element) in zadnji list kopice. Ker je element v korenu sedaj manjši od sinov, dobljeno drevo ni kopica - to popravimo tako, da se novi koren rekurzivno zamenjuje z večjim izmed sinov. Lahko rečemo tudi, da se pogreza. Največji element, ki je sedaj na mestu zadnjega lista, pa po zamenjavi ni več del kopice, ampak predstavlja trenutno urejeni del tabele. Ko se postopek zamenjevanja elementov in popravljanja kopice ponavlja, se na desni strani tabele nabirajo urejeni elementi, kopica pa se zmanjšuje. Algoritem se zaključi, ko ima kopica en sam element.
voidurediSKopico(tabela[]){//v tabeli zgradimo maksimalno kopicozgradiKopico(tabela);konec=length(tabela)-1;do{//zamenjamo koren in zadnji list kopicezamenjaj(0,konec);//zmanjšamo velikost kopicekonec--;//in popravimo kopicopogrezniKopico(tabela,0,konec);}while(konec>0);}voidzgradiKopico(tabela[]){//graditi začnemo z uporabo elementov predzadnjega in zadnjega nivojastart=(length(tabela)-2)/2;do{pogrezniKopico(tabela,start,length(tabela)-1);start--;}while(start>=0);}voidpogrezniKopico(tabela[],start,konec){stars=start;otrok=start*2+1;while(otrok<=konec){//če desni otrok obstaja in je večji od levega, izberemo desnegaif((otrok+1<=konec)&&(tabela[otrok+1]>tabela[otrok]))otrok++;//če je stars večji od otrok imamo kopico in končamoif(tabela[stars]>=tabela[otrok])return;zamenjaj(stars,otrok);//po menjavi gremo en nivo nižje v kopicistars=otrok;otrok=otrok*2+1;}}
Ta članek o računalništvu je škrbina. Pomagajte Wikipediji in ga razširite.