Advertisement
Herowaree

merge

Apr 26th, 2020
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. //UFPB - 06/08/2016 - Aluno: Thulio Guilherme Silva de Amorim - Matrícula: 11328381
  2. //Algoritmos baseado nas aulas de Ordenação e Recuperação de Dados ministradas pelo professor Fernando Matos - fernando@ci.ufpb.br
  3.  
  4. #include <stdio.h>
  5.  
  6. void showVector(int* vector, int size){
  7. for(int i = 0; i < size; i++){
  8. printf("%d ", vector[i]);
  9. }
  10. printf("\n");
  11. }
  12.  
  13. void mergeConquer(int begin, int middle, int end, int* vector, int* keeper){
  14. for(int i = begin; i <= end; i++){
  15. keeper[i] = vector[i];
  16. }
  17. int i = begin;
  18. int j = middle + 1;
  19. int k = begin;
  20.  
  21. while(i <= middle && j <= end){
  22. if(keeper[i] <= keeper[j]){
  23. vector[k] = keeper[i];
  24. i++;
  25. }else{
  26. vector[k] = keeper[j];
  27. j++;
  28. }
  29. k++;
  30. }
  31.  
  32. while(i <= middle){
  33. vector[k] = keeper[i];
  34. k++;
  35. i++;
  36. }
  37.  
  38. while(j <= end){
  39. vector[k] = keeper[j];
  40. j++;
  41. k++;
  42. }
  43. }
  44.  
  45. void mergeDivide(int begin, int end, int* vector, int* keeper){
  46. if(begin < end){
  47. int middle = begin + (end - begin) / 2;
  48. mergeDivide(begin, middle, vector, keeper);
  49. mergeDivide(middle + 1, end, vector, keeper);
  50. mergeConquer(begin, middle, end, vector, keeper);
  51. }
  52. }
  53.  
  54. void mergesort(int* vector, int* keeper, int size){ //Best case: O(n*logn) - Worst case: O(n*logn)
  55. for(int i = 0; i < size; i++){
  56. keeper[i] = vector[i];
  57. }
  58. mergeDivide(0, size - 1, vector, keeper);
  59. }
  60.  
  61. int main(){
  62. int n;
  63.  
  64. scanf("%d", &n);
  65.  
  66. int vector[n], keeper[n];
  67.  
  68. for(int i = 0; i < n; i++){
  69. scanf("%d", &vector[i]);
  70. }
  71.  
  72. mergesort(vector, keeper, n);
  73.  
  74. showVector(vector, n);
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement