Advertisement
techno-

P2 algo 🤑

Oct 15th, 2022
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.59 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. #include <sys/time.h>
  5. #include <math.h>
  6. #define UMBRAL 1
  7.  
  8. double microsegundos() {
  9.     struct timeval t;
  10.     if (gettimeofday(&t, NULL) < 0 )
  11.         return 0.0;
  12.     return (t.tv_usec + t.tv_sec * 1000000.0);
  13. }
  14.  
  15.  
  16. void ordenacionPorInsercion (int v[],int n) {
  17.     int i;
  18.     int j;
  19.     int x;
  20.  
  21.     for (i = 1; i <= n - 1; i++) {
  22.         x = v[i];
  23.         j = i - 1;
  24.         while (j > -1 && v[j] > x) {
  25.             v[j + 1] = v[j];
  26.             j = j - 1;
  27.         }
  28.         v[j + 1] = x;
  29.     }
  30. }
  31. void inicializar_semilla() {
  32.     srand(time(NULL));
  33. }
  34. void aleatorio(int v [], int n) {/* se generan números pseudoaleatorio entre -n y +n */
  35.     int i, m=2*n+1;
  36.     for (i=0; i < n; i++)
  37.         v[i] = (rand() % m) - n;
  38. }
  39. void ascendente(int v [], int n) {
  40.     int i;
  41.     for (i=0; i < n; i++)
  42.         v[i] = i;
  43. }
  44. void descendente(int v [], int n){
  45.     int i;
  46.     int j;
  47.     for (i=0; i < n; i++) {
  48.         j = 10 - i;
  49.         v[i] = j;
  50.     }
  51. }
  52.  
  53.  
  54.  
  55. void ordenarAux (int V[], int izq, int der){
  56.     int i;
  57.     int j;
  58.     int x;
  59.     int Aux;
  60.     int pivote;
  61.     if(izq+ UMBRAL <= der){
  62.         if(izq>der){
  63.             x = (rand() % (izq + 1 - der)) + der;
  64.         }else{
  65.             x = (rand() % (der + 1 - izq)) + izq;
  66.         }
  67.         pivote = V[x];
  68.         Aux=V[izq], V[izq]=V[x],V[x]=Aux;
  69.         i = izq + 1;
  70.         j = der;
  71.         for(;i <= j;i++){
  72.             for(;i <= der && V[i] < pivote;i++){
  73.             }
  74.             for(;V[j] > pivote;j--){
  75.             }
  76.             if( i <= j){
  77.                 Aux= V[i] , V[i]=V[j],V[j]=Aux;
  78.                 i = i + 1;
  79.                 j = j - 1;
  80.             }
  81.         }
  82.         Aux=V[izq] , V[izq]=V[j],V[j]=Aux;
  83.         ordenarAux (V,izq,j-1);
  84.         ordenarAux (V,j+1,der);
  85.     }
  86. }
  87. void ordenacionRapida(int V[], int izq, int der){
  88.     ordenarAux(V,izq, der);
  89.     if (UMBRAL>1){
  90.         ordenacionPorInsercion(V,der);
  91.     }
  92. }
  93.  
  94. void test(int a[], int tamano){
  95.     int i;
  96.     aleatorio(a,tamano);
  97.     for(i=0;i<tamano;i++){
  98.         printf("%d ",a[i]);
  99.     }
  100.     printf("\n");
  101.     ordenacionPorInsercion(a,tamano);
  102.     for(i=0;i<tamano;i++){
  103.         printf("%d ",a[i]);
  104.     }
  105. }
  106.  
  107. void test2(int a[], int izq,int der){
  108.     int i;
  109.     aleatorio(a,der);
  110.     for(i=0;i<der;i++){
  111.         printf("%d ",a[i]);
  112.     }
  113.     printf("\n");
  114.     ordenarAux(a,izq,der);
  115.     for(i=0;i<der;i++){
  116.         printf("%d ",a[i]);
  117.     }
  118. }
  119.  
  120.  
  121.  
  122.  
  123. int main() {
  124.  
  125.     /*
  126.     int k;
  127.     double t1, t2, t, x, y, z;
  128.     int cont;
  129.     int n;
  130.  
  131.     inicializar_semilla();
  132.     int tamano = 500;
  133.     int a[tamano];
  134.  
  135.     descendente(a, tamano);
  136.  
  137.     t1 = microsegundos();
  138.     ordenacionPorInsercion(a, tamano);
  139.     t2 = microsegundos();
  140.  
  141.     t = t2 - t1;
  142.  
  143.     if (t < 500) {
  144.         t1 = microsegundos();
  145.         for (k = 0; k <= 100; k++) {
  146.             ordenacionPorInsercion(a, tamano);
  147.         }
  148.         t2 = microsegundos();
  149.         t = (t2 - t1) / k;
  150.     }
  151.  
  152.     for (cont = 1; cont <= 3; cont++) {
  153.         for (n = 500; n <= 32000; n = n * 2) {
  154.             inicializar_semilla();
  155.             int b[n];
  156.             aleatorio(b,n);
  157.             t1 = microsegundos();
  158.             ordenacionPorInsercion(b,n);
  159.             t2 = microsegundos();
  160.             t = t2 - t1;
  161.             x = t / pow(n,1.8);
  162.             y = t / pow(n,2);
  163.             z = t / pow(n, 2.2);
  164.             printf("%12d%15.3f%15.6f%15.6f%15.6f\n", n, t, x, y, z);
  165.         }
  166.         printf("\n");
  167.     }
  168.      */
  169.  
  170.     int k;
  171.     double t1, t2, t, x, y, z;
  172.     int cont;
  173.     int n;
  174.  
  175.     inicializar_semilla();
  176.     int tamano = 500;
  177.     int a[tamano];
  178.     aleatorio(a,tamano);
  179.     int izq;
  180.     int der;
  181.     izq = a[1];
  182.     der = a[500];
  183.  
  184.     t1 = microsegundos();
  185.     ordenarAux(a, izq, der);
  186.     t2 = microsegundos();
  187.  
  188.     t = t2 - t1;
  189.  
  190.     if (t < 500) {
  191.         t1 = microsegundos();
  192.         for (k = 0; k <= 100; k++) {
  193.             ordenarAux(a, izq, der);
  194.         }
  195.         t2 = microsegundos();
  196.         t = (t2 - t1) / k;
  197.     }
  198.  
  199.     for (cont = 1; cont <= 3; cont++) {
  200.         for (n = 500; n <= 32000; n = n * 2) {
  201.             inicializar_semilla();
  202.             int b[n];
  203.             aleatorio(b,n);
  204.             t1 = microsegundos();
  205.             ordenarAux(b, izq, der);
  206.             t2 = microsegundos();
  207.             t = t2 - t1;
  208.             x = t / pow(n,1.8);
  209.             y = t / pow(n,2);
  210.             z = t / pow(n, 2.2);
  211.             printf("%12d%15.3f%15.6f%15.6f%15.6f\n", n, t, x, y, z);
  212.         }
  213.         printf("\n");
  214.     }
  215.  
  216.  
  217.  
  218.     return 0;
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement