Advertisement
jedrzejd

Sortowanie Przez kopcowanie Heap Sort

Nov 22nd, 2017
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. //
  2. //  main.cpp
  3. //  Sortowanie przez kopcowanie Heap Sort
  4. //
  5. //  Created by andy on 22.11.2017.
  6. //  Copyright © 2017 andy. All rights reserved.
  7. //
  8.  
  9. #include <cstdio>
  10. #include <algorithm>
  11. const int MXN=1e6+5;
  12. int tablica[MXN],n,a,wynik[MXN];
  13. void przywruc(int index1){
  14.     int lewa=2*index1,prawa=2*index1+1;//lewy index syna 2x      prawy index syna 2x+1
  15.     int maximum=index1;
  16.     if(tablica[lewa]>tablica[maximum]&&lewa<=n)//jezeli lewy syn jest mniejszy ojciec to bede go rozpatrywal
  17.         maximum=lewa;
  18.     if(tablica[prawa]>tablica[maximum]&&prawa<=n)//jezeli prawy syn jest mniejszy ojciec to bede go rozpatrywal
  19.         maximum=prawa;
  20.     if(maximum>index1){//jezeli nie wyszedl poza tablice to ide dalej
  21.         std::swap(tablica[index1],tablica[maximum]); //zamieniam mniejszy z lewego i prawego syna i do niego wchodze
  22.         przywruc(maximum);
  23.     }
  24. }
  25. void usun(){
  26.     tablica[1]=tablica[n];//usuniecie korzenie i dodanie w jego miejsce ostatniego w tablicy
  27.     n--;
  28.     przywruc(1);//przewracanie kopieca
  29. }
  30. int maks(){
  31.     return tablica[1];
  32. }
  33. int main(){
  34.     scanf("%d",&n);
  35.     int m=n;
  36.     for(int i=1;i<=n;i++){
  37.         scanf("%d",&tablica[i]);
  38.     }
  39.     int j=n;
  40.     for(int i=n/2;i>=1;i--){
  41.         przywruc(i);//tworzenie kopca
  42.     }
  43.     while(n>=1){
  44.         wynik[j]=maks();//robienie tablicy posortowanej z korzenia kopca
  45.         j--;
  46.         usun();
  47.     }
  48.     for(int i=1;i<=m;i++)
  49.         printf("%d ",wynik[i]);
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement