Advertisement
Eriol-kun

BinaryInsertion

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