Advertisement
Luiggi_98

WOWOWOWOWOWO.c

Mar 14th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. #include <time.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5. /*
  6. !!!!!!!!!!!! D A F A R E !!!!!!!!!!!!
  7. sx e dx sono le posizioni del primo e dell'ultimo elemento dell'array mentre
  8. px è la posizione dell'elemento perno.
  9. La funzione deve restituire la posizione del perno dopo che gli elementi sono
  10. stati partizionati.
  11. */
  12. int distribuzione(int a[], int sx, int px, int dx) {
  13. int i = sx-1;
  14. int j,aux;
  15. for(j=sx;j<dx;j++){
  16. if(a[j] <=px){
  17. i++;
  18. aux = a[i];
  19. a[i] = a[j];
  20. a[j] = aux;
  21. }
  22. }
  23. i++;
  24. aux = a[i];
  25. a[i] = a[dx];
  26. a[dx] = aux;
  27. return i;
  28. }
  29.  
  30. void quicksort( int a[], int sx, int dx ) {
  31.  
  32. int perno, pivot;
  33. if( sx < dx ) {
  34. /* DA IMPLEMENTARE: scelta del pivot. Scegliere una posizione a caso tra sx e dx inclusi. */
  35. pivot = a[dx];
  36.  
  37. perno = distribuzione(a, sx, pivot, dx); /* separa gli elementi minori di a[pivot]
  38. da quelli maggiori o uguali */
  39. /* Ordina ricorsivamente le due metà */
  40. quicksort(a, sx, perno-1);
  41. quicksort(a, perno+1, dx);
  42.  
  43. }
  44.  
  45. }
  46.  
  47. /* Lettura di un array di interi da input.
  48. Il primo elemento è la lunghezza dell'array */
  49. int legge(int **a, int *len) {
  50.  
  51. int i;
  52. scanf("%d", len);
  53. if(*len <= 0) return 1;
  54.  
  55. *a = (int *) malloc(*len * sizeof(int));
  56. if(*a == NULL) return 1;
  57.  
  58. for( i = 0; i < *len; i++ )
  59. scanf("%d", (*a)+i);
  60.  
  61. return 0;
  62.  
  63. }
  64.  
  65. int main() {
  66.  
  67. int i, n, *A;
  68.  
  69. if( legge(&A, &n)) return 1;
  70.  
  71. srand(time(NULL));
  72. quicksort(A, 0, n-1);
  73.  
  74. /* Stampa l'array ordinato */
  75. for( i = 0; i < n; i++ )
  76. printf("%d ", A[i]);
  77.  
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement