Advertisement
Eriol-kun

FinalBinaryInsertion2

May 16th, 2011
446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.43 KB | None | 0 0
  1. /*
  2. Ordenacion por Insercion Binaria
  3. */
  4.  
  5. #include <conio.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8.  
  9. int BinarySearch (float a[], int low, int high, float key)
  10. {
  11.     int mid;
  12.  
  13.     if (low == high)
  14.     {
  15.         return low;
  16.     }
  17.  
  18.     mid = low + ((high - low) / 2);
  19.  
  20.     if (key > a[mid])
  21.     {
  22.         return BinarySearch (a, mid + 1, high, key);
  23.     }
  24.     else
  25.     {
  26.         if (key < a[mid])
  27.         {
  28.             return BinarySearch (a, low, mid, key);
  29.         }
  30.     }
  31.  
  32.     return mid;
  33. }
  34.  
  35. void BinaryInsertionSort (float a[], int n)
  36. {
  37.     int ins, i, j;
  38.     float tmp;
  39.  
  40.     for (i = 1; i < n; i++)
  41.     {
  42.         ins = BinarySearch (a, 0, i, a[i]);
  43.         tmp = a[i];
  44.         for (j = i - 1; j >= ins; j--)
  45.         {
  46.             a[j + 1] = a[j];
  47.         }
  48.         a[ins] = tmp;
  49.     }
  50. }
  51.  
  52. int main()
  53. {
  54.     char getcher, choice, exit = 'n';
  55.     int a, b, employed, caseone = 0;
  56.    
  57.     system("cls");
  58.     // clrscr();
  59.        
  60.     puts("Cuantos empleados hay en su planilla?\n: ");
  61.     scanf("%i", &employed);
  62.     scanf("%c", &getcher);
  63.                
  64.     struct emp          // creacion del registro
  65.     {
  66.         float id;
  67.         char name[30];
  68.         char name2[30];
  69.     };
  70.                
  71.     struct emp employee[employed]; // n empleados
  72.            
  73.     float id_vector[employed];
  74.    
  75.     do
  76.     {              
  77.         system("cls");
  78.            
  79.         puts("Bienvenido. Elija una opcion: \n\n\t1. Llenar registros\n\n\t2. Desplegar registros\n\n\t3. Ordenar registro por Insercion Binaria\n\n\t4. Salir\n\n");
  80.         choice = getch();
  81.        
  82.         switch(choice)
  83.         {
  84.             case '1':
  85.                 system("cls");
  86.                 // clrscr();
  87.                
  88.                
  89.                 puts("Favor llene los siguientes datos:\n\n");
  90.                
  91.                 for(a = 0; a < employed; a++)
  92.                 {
  93.                     printf("Nombre del empleado #%i: ", (a + 1));
  94.                     gets(employee[a].name);
  95.                 }
  96.                
  97.                 puts("\n");
  98.                
  99.                 for(a = 0; a < employed; a++)
  100.                 {
  101.                     printf("Cedula del empleado #%i: ", (a + 1));
  102.                     scanf("%f", &employee[a].id);
  103.                 }
  104.                
  105.                 puts("\n\nDatos ingresados. Presione una tecla para regresar al menu.");
  106.                
  107.                 scanf("%c", &getcher);   // Igual que una pausa en runtime, pero para que no deje basura (enter) por ahi para los gets del for
  108.                 // getch();
  109.                 caseone++;
  110.                    
  111.                 break;
  112.                
  113.             case '2':
  114.                 if(caseone > 0)
  115.                 {
  116.                     system("cls");
  117.                     // clrscr();
  118.                    
  119.                     puts("Los actuales empleados son:\n\n");
  120.                    
  121.                     for(a = 0; a < employed; a++)
  122.                     {
  123.                         printf("Empleado %i: %s, cedula %.0f\n", (a + 1), employee[a].name2, employee[a].id);
  124.                     }
  125.                    
  126.                     puts("\n\nPresione una tecla para regresar al menu");
  127.                     scanf("%c", &getcher);
  128.                     scanf("%c", &getcher);
  129.                 }
  130.                 else
  131.                 {
  132.                     puts("Primero, llene la lista de empleados por lo menos una vez.");
  133.                    
  134.                     scanf("%c", &getcher);
  135.                 }
  136.                
  137.                 break;
  138.                
  139.             case '3':
  140.                 system("cls");
  141.                
  142.                 for(a = 0; a < employed; a++)
  143.                 {
  144.                     id_vector[a] = employee[a].id;
  145.                 }
  146.                
  147.                 BinaryInsertionSort(id_vector, employed);
  148.                
  149.                 for(a = 0; a < employed; a++)
  150.                 {
  151.                     for(b = 0; b < employed; b++)
  152.                     {
  153.                         if(id_vector[a] == employee[b].id)
  154.                         {
  155.                             strcpy(employee[a].name2, employee[b].name);
  156.                         }
  157.                     }
  158.                 }
  159.                
  160.                 for(a = 0; a < employed; a++)
  161.                 {
  162.                     employee[a].id = id_vector[a];
  163.                 }
  164.                
  165.                 puts("Vector ordenado.");
  166.                 scanf("%c", &getcher);
  167.                
  168.                 break;
  169.            
  170.             case '4':
  171.                 exit = 's';
  172.                 break;
  173.                
  174.             default:
  175.                 puts("\n\nIngrese un valor de los de la lista.");
  176.                 scanf("%c", &getcher);
  177.                 break;
  178.         }
  179.     }
  180.     while(exit != 's');
  181.    
  182.     return 0;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement