Advertisement
Jakubowiczish

Untitled

Mar 14th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <ctime>
  4.  
  5. int parent(int arr[], int index){
  6. if(index%3 == 2) return index/3 + 1;
  7. if(index%3 == 0) return index/3;
  8. if(index%3 == 1) return index/3;
  9. }
  10. int leftChild(int index){
  11. return index*3-1;
  12. }
  13. int middleChild(int index){
  14. return index*3;
  15. }
  16. int rightChild(int index){
  17. return index*3+1;
  18. }
  19. void heapify(int arr[], int index){
  20. int size = arr[0];
  21. int largest = index;
  22. int left = leftChild(index);
  23. int middle = middleChild(index);
  24. int right = rightChild(index);
  25. if(left <= size && arr[left] > arr[largest]) largest=left;
  26. if(middle <= size && arr[middle] > arr[largest]) largest=middle;
  27. if(right <= size && arr[right] > arr[largest]) largest=right;
  28. if(largest != index){
  29. std::swap(arr[largest], arr[index]);
  30. heapify(arr,largest);
  31. }
  32. }
  33. void buildHeap(int arr[], int n){
  34. arr[0]=n-1;
  35. for(int i = (n-1)/3; i>=1; i--){
  36. heapify(arr,i);
  37. }
  38. }
  39. int heapsort(int arr[], int n){
  40. buildHeap(arr, n);
  41. for(int i = n-1; i>1; i--){
  42. std::swap(arr[1], arr[i]);
  43. arr[0]--;
  44. heapify(arr,1);
  45. }
  46. }
  47. int main(int argc, char** argv) {
  48. srand(time(NULL));
  49. //EXAMPLE USAGE OF ALGORITHM
  50. int n = 10;
  51. int tab[n];
  52.  
  53. for(int i = 0; i < n; i++){
  54. tab[i]=rand();
  55. }
  56. std::cout << "Printing non-sorted array" << std::endl;
  57. for(int i = 1; i < n; i++){
  58. std::cout << tab[i] << " ";
  59. }
  60. std::cout<<std::endl;
  61. heapsort(tab,n);
  62. std::cout << "Printing array" << std::endl;
  63. for(int i = 1; i < n; i++){
  64. std::cout << tab[i] << " ";
  65. }
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement