Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. int lijevo_dijete(int i){
  2. return 2 * i + 1;
  3. }
  4.  
  5. int desno_dijete(int i){
  6. return 2 * i + 2;
  7. }
  8.  
  9. bool list(int vel, int i){
  10. return i >= vel/2 && i < vel;
  11. }
  12.  
  13. void popravi_dolje(std::vector<int> &a, int i, int velicina){
  14. while(!list(velicina,i)){
  15. int veci(lijevo_dijete(i));
  16. int dd(desno_dijete(i));
  17. if(dd < velicina && a[dd] > a[veci])
  18. veci = dd;
  19. if(a[i] > a[veci])
  20. return;
  21. int tmp(a[i]);
  22. a[i] = a[veci];
  23. a[veci] = tmp;
  24. i = veci;
  25. }
  26. }
  27.  
  28. void stvoriGomilu(std::vector<int> &a){
  29. for(int i = int(a.size()/2); i >= 0; i--)
  30. popravi_dolje(a,i, a.size());
  31. }
  32.  
  33. int roditelj(int i){
  34. return int((i-1)/2);
  35. }
  36.  
  37. void popravi_gore(std::vector<int> &a, int i){
  38. while (i != 0 && a[i] > a[roditelj(i)]) {
  39. int tmp(a[i]);
  40. a[i] = a[roditelj(i)];
  41. a[roditelj(i)] = tmp;
  42. i = roditelj(i);
  43. }
  44. }
  45.  
  46. void umetniUGomilu(vector<int> &a, int umetnuti, int &velicina){
  47. a.push_back(umetnuti);
  48. velicina++;
  49. popravi_gore(a, velicina-1);
  50. }
  51.  
  52.  
  53. int izbaciPrvi(vector<int> &a, int &velicina){
  54. velicina--;
  55. int tmp(a[0]);
  56. a[0] = a[velicina];
  57. a[velicina] = tmp;
  58.  
  59. if(velicina != 0)
  60. popravi_dolje(a,0, velicina);
  61.  
  62. return a[velicina];
  63. }
  64.  
  65. void gomilaSort(vector<int> &a){
  66. stvoriGomilu(a);
  67. int velicina(a.size());
  68. for(int i = 0; i < a.size()-1; i++)
  69. izbaciPrvi(a, velicina);
  70. }
  71.  
  72. int main() {
  73. return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement