Advertisement
Eriol-kun

FinalBinaryInsertion

May 15th, 2011
430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.19 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, 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.     };
  69.                
  70.     struct emp employee[employed]; // n empleados
  71.            
  72.     float id_vector[employed];
  73.    
  74.     do
  75.     {              
  76.         system("cls");
  77.            
  78.         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");
  79.         choice = getch();
  80.        
  81.         switch(choice)
  82.         {
  83.             case '1':
  84.                 system("cls");
  85.                 // clrscr();
  86.                
  87.                
  88.                 puts("Favor llene los siguientes datos:\n\n");
  89.                
  90.                 for(a = 0; a < employed; a++)
  91.                 {
  92.                     printf("Nombre del empleado #%i: ", (a + 1));
  93.                     gets(employee[a].name);
  94.                 }
  95.                
  96.                 puts("\n");
  97.                
  98.                 for(a = 0; a < employed; a++)
  99.                 {
  100.                     printf("Cedula del empleado #%i: ", (a + 1));
  101.                     scanf("%f", &employee[a].id);
  102.                 }
  103.                
  104.                 puts("\n\nDatos ingresados. Presione una tecla para regresar al menu.");
  105.                
  106.                 scanf("%c", &getcher);   // Igual que una pausa en runtime, pero para que no deje basura (enter) por ahi para los gets del for
  107.                 // getch();
  108.                 caseone++;
  109.                    
  110.                 break;
  111.                
  112.             case '2':
  113.                 if(caseone > 0)
  114.                 {
  115.                     system("cls");
  116.                     // clrscr();
  117.                    
  118.                     puts("Los actuales empleados son:\n\n");
  119.                    
  120.                     for(a = 0; a < employed; a++)
  121.                     {
  122.                         printf("Empleado %i: %s, cedula %.0f\n", (a + 1), employee[a].name, employee[a].id);
  123.                     }
  124.                    
  125.                     puts("\n\nPresione una tecla para regresar al menu");
  126.                     scanf("%c", &getcher);
  127.                     scanf("%c", &getcher);
  128.                 }
  129.                 else
  130.                 {
  131.                     puts("Primero, llene la lista de empleados por lo menos una vez.");
  132.                    
  133.                     scanf("%c", &getcher);
  134.                 }
  135.                
  136.                 break;
  137.                
  138.             case '3':
  139.                 system("cls");
  140.                
  141.                 for(a = 0; a < employed; a++)
  142.                 {
  143.                     id_vector[a] = employee[a].id;
  144.                 }
  145.                
  146.                 BinaryInsertionSort(id_vector, employed);
  147.                
  148.                 for(a = 0; a < employed; a++)
  149.                 {
  150.                     employee[a].id = id_vector[a];
  151.                 }
  152.                
  153.                 puts("Vector ordenado.");
  154.                 scanf("%c", &getcher);
  155.                
  156.                 break;
  157.            
  158.             case '4':
  159.                 exit = 's';
  160.                 break;
  161.                
  162.             default:
  163.                 puts("\n\nIngrese un valor de los de la lista.");
  164.                 scanf("%c", &getcher);
  165.                 break;
  166.         }
  167.     }
  168.     while(exit != 's');
  169.    
  170.     return 0;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement