Advertisement
Guest User

P6 Estructuras 1 (EJ 11 Y 12)

a guest
Jun 28th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. //QSORT
  2. //No es estable
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. #define S(a) (sizeof(a) / sizeof(a[0]))
  8. #define max(a,b) (a<b) ? b : a
  9. #define min(a,b) (a>b) ? b : a
  10.  
  11. typedef enum {ALEATORIO, ULTIMO, MEDIO, MEDIANA_PMU} pivotType;
  12.  
  13. void swap(int *a, int *b){
  14. int aux = *a;
  15. *a = *b;
  16. *b = aux;
  17. }
  18.  
  19. int partition(int arr[], int l, int r, pivotType P){
  20. int piv_index;
  21. switch(P){
  22. case ALEATORIO:
  23. piv_index = rand()%(r-l+1) + l;
  24. break;
  25. case ULTIMO:
  26. piv_index = r;
  27. break;
  28. case MEDIO:
  29. piv_index = (l+r)/2;
  30. break;
  31. case MEDIANA_PMU:
  32. piv_index = arr[l] + arr[r] + arr[(l+r)/2] - max(arr[l], max(arr[r], arr[(l+r)/2])) - min(arr[l], min(arr[r], arr[(l+r)/2]));
  33. piv_index = (piv_index == arr[l]) ? l : ((piv_index == arr[r]) ? r : (l+r)/2 );
  34. break;
  35. default:
  36. piv_index = r;
  37. break;
  38. }
  39.  
  40. swap(&arr[piv_index], &arr[r]);
  41.  
  42. int i = l-1, j;
  43. int pivot = arr[r];
  44.  
  45. for(j = l; j<=r-1; j++)
  46. if(arr[j] <= pivot)
  47. swap(&arr[++i], &arr[j]);
  48. swap(&arr[i+1], &arr[r]);
  49. return i+1;
  50. }
  51.  
  52. void quicksort(int arr[], int l, int r, pivotType P){
  53. if(l<r){
  54. int p = partition(arr, l, r, P);
  55. quicksort(arr, l, p-1, P);
  56. quicksort(arr, p+1, r, P);
  57. }
  58. }
  59.  
  60. int main()
  61. {
  62. int k;
  63. srand(time(NULL));
  64. int a[] = {3,7,11,12,2,4,3,129,32,45,121,764,76,5,8};
  65.  
  66. for(k=0; k<S(a); k++) printf("%d ", a[k]); puts("\n");
  67.  
  68. quicksort(a, 0, S(a)-1, MEDIANA_PMU);
  69.  
  70. for(k=0; k<S(a); k++) printf("%d ", a[k]); puts("\n");
  71.  
  72. return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement