Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. /*
  2. ============================================================================
  3. Name : eal05heapsort.c
  4. Author :
  5. Version :
  6. Copyright : Your copyright notice
  7. Description : Hello World in C, Ansi-style
  8. ============================================================================
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13.  
  14. void swap(int* a, int* b)
  15. {
  16. int t = *a;
  17. *a = *b;
  18. *b = t;
  19. }
  20.  
  21. void versenke(int* arr, int i, int size)
  22. {
  23. while( i<=((size/2)-1) )
  24. {
  25. int kindIndex = ((i+1)* 2)-1;// berechne index kind
  26.  
  27. //welches kind groeßer
  28. if(kindIndex < size-1)
  29. {
  30. if(arr[kindIndex] < arr[kindIndex+1])
  31. {
  32. kindIndex++;
  33. }
  34. }
  35. //teste ob element sinken muss
  36. if(arr[i] < arr[kindIndex])
  37. {
  38. swap(arr+i, arr+kindIndex);
  39. i=kindIndex; // wiederhole mit neuer pos
  40. }
  41. else
  42. {
  43. break;
  44. }
  45. }
  46. }
  47.  
  48.  
  49. void heapsort(int* arr, int size)
  50. {
  51. //init maxheap!
  52. int i;
  53. for(i=size/2-1; i>=0; i--)
  54. {
  55. versenke(arr, i, size);
  56. }
  57.  
  58. //hier wird sortiert!!!
  59.  
  60. for(i=size-1; i>0; i--)
  61. {
  62. swap(arr+i, arr);
  63. versenke(arr, 0, i);
  64. }
  65.  
  66.  
  67. }
  68.  
  69.  
  70.  
  71. void merge(int* a, int l, int m, int r)
  72. {
  73. int *b=malloc(sizeof(int) * r);
  74. int i=0;
  75. int j,k;
  76.  
  77. for(i=l; i<r; i++)
  78. {
  79. b[i]=a[i];
  80. }
  81.  
  82. i=l;
  83. j=m+1;
  84. k=l;
  85. while(i<=m && j<r)
  86. {
  87. if(b[i]<=b[j])
  88. {
  89. a[k]=b[i];
  90. k++;
  91. i++;
  92. }
  93. else
  94. {
  95. a[k]=b[j];
  96. k++;
  97. j++;
  98. }
  99. }
  100.  
  101. while(i<=m)
  102. {
  103. a[k]=b[i];
  104. k++;
  105. i++;
  106. }
  107.  
  108. while(j<r)
  109. {
  110. a[k]=b[j];
  111. k++;
  112. j++;
  113. }
  114. free(b);
  115. }
  116.  
  117.  
  118. void mergesort(int*arr, int l, int r)
  119. {
  120. if(l<r)
  121. {
  122. int m = (l+r)/2;
  123. mergesort(arr, l, m);
  124. mergesort(arr, m+1, r);
  125. merge(arr, l, m, r);
  126. }
  127. }
  128.  
  129.  
  130.  
  131. int main(void)
  132. {
  133. int size=9;
  134. int i;
  135. int *test=malloc(sizeof(int)*size);
  136. for(i=0; i<size; i++)
  137. test[i]=42-i;
  138.  
  139. mergesort(test, 0, size);
  140.  
  141.  
  142. for(i=0; i<size; i++)
  143. printf("%i,", test[i]);
  144. printf("\n");
  145.  
  146. free(test);
  147. return 1;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement