Advertisement
I_LIKE_COFFEE

12

Oct 28th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.84 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <malloc.h>
  4.  
  5. int main(){
  6.     int i = 0, n = 0, first = 0, last = 0, middle = 0, targed = 0, index = 1, a = 0, b = 0;
  7.     scanf("%d %d", &n, &targed);
  8.  
  9.     int* arr = (int*)malloc(n * sizeof(int));
  10.     for (int i = 0; i < n; i++)
  11.         scanf("%d", &arr[i]);
  12.  
  13.     printf("Initial array:\n");
  14.     for (int i = 0; i < n; i++)
  15.         printf("%d ", arr[i]);
  16.     printf("\nLinear search:\n");
  17.     arr[n] = targed;//линейный
  18.     while (arr[i] != targed){
  19.         printf("%d ", arr[i]);
  20.         i++;
  21.     }
  22.     if (arr[i] == targed)
  23.         printf("%d ", targed);
  24.    
  25.    
  26.     printf("\nBinary search:\n");
  27.     last = n - 1;//бинарный
  28.     middle = (first + last) / 2 + 1;
  29.     printf("%d ", middle);
  30.     while (first <= last){
  31.         if (middle != n - 1)
  32.             printf("%d ", arr[middle]);
  33.         if (arr[middle] == targed){
  34.             printf("%d", arr[middle]);
  35.             break;
  36.         }
  37.         else if (arr[middle] > targed){
  38.             last = middle;
  39.             middle = (first + last) / 2;
  40.         }
  41.         else if (arr[middle] < targed){
  42.             first = middle;
  43.             if (middle == n - 2){
  44.                 middle = (first + last) / 2 + 1;
  45.             }
  46.             else
  47.                 middle = (first + last) / 2;
  48.         }
  49.        
  50.     }
  51.  
  52.    
  53.     //1 2 3 4 5 15 32
  54.     printf("\n\nDoubling search:");
  55.     while (arr[index] < targed)//даблинг
  56.        
  57.             index *= 2;
  58.  
  59.  
  60.     first = index / 2;
  61.     last = index;
  62.     middle = (first + last) / 2;
  63.     while (arr[i] < first){
  64.         i++;
  65.         if (arr[i] < first)
  66.             a = arr[i];
  67.     }
  68.     i = 0;
  69.     while (arr[i] < last / 2){
  70.         i++;
  71.         if (arr[i] < last)
  72.             b = arr[i];
  73.     }
  74.  
  75.  
  76.     while (first <= last){
  77.         if (arr[middle] == targed){
  78.             //printf("El has index: %d", middle + 1);
  79.             break;
  80.         }
  81.         else if (arr[middle] > targed)
  82.             last = middle - 1;
  83.         else if (arr[middle] < targed)
  84.             first = middle + 1;
  85.         middle = (first + last) / 2;
  86.     }
  87.  
  88.     //if (first > last)
  89.         //printf("Not found el");
  90.  
  91.     printf("%d %d", a, b);
  92.        
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement