Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.cpp
- // Sortowanie przez kopcowanie Heap Sort
- //
- // Created by andy on 22.11.2017.
- // Copyright © 2017 andy. All rights reserved.
- //
- #include <cstdio>
- #include <algorithm>
- const int MXN=1e6+5;
- int tablica[MXN],n,a,wynik[MXN];
- void przywruc(int index1){
- int lewa=2*index1,prawa=2*index1+1;//lewy index syna 2x prawy index syna 2x+1
- int maximum=index1;
- if(tablica[lewa]>tablica[maximum]&&lewa<=n)//jezeli lewy syn jest mniejszy ojciec to bede go rozpatrywal
- maximum=lewa;
- if(tablica[prawa]>tablica[maximum]&&prawa<=n)//jezeli prawy syn jest mniejszy ojciec to bede go rozpatrywal
- maximum=prawa;
- if(maximum>index1){//jezeli nie wyszedl poza tablice to ide dalej
- std::swap(tablica[index1],tablica[maximum]); //zamieniam mniejszy z lewego i prawego syna i do niego wchodze
- przywruc(maximum);
- }
- }
- void usun(){
- tablica[1]=tablica[n];//usuniecie korzenie i dodanie w jego miejsce ostatniego w tablicy
- n--;
- przywruc(1);//przewracanie kopieca
- }
- int maks(){
- return tablica[1];
- }
- int main(){
- scanf("%d",&n);
- int m=n;
- for(int i=1;i<=n;i++){
- scanf("%d",&tablica[i]);
- }
- int j=n;
- for(int i=n/2;i>=1;i--){
- przywruc(i);//tworzenie kopca
- }
- while(n>=1){
- wynik[j]=maks();//robienie tablicy posortowanej z korzenia kopca
- j--;
- usun();
- }
- for(int i=1;i<=m;i++)
- printf("%d ",wynik[i]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement