Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include "math.h"
  5.  
  6. int *create_arr(int );
  7. void print_arr(int *, int);
  8. void bubble_sort(int *, int);
  9. void insert_sort(int *, int);
  10. int bin_search(int *, int, int);
  11. void insert_sort_with_bin_search(int *, int);
  12. int bin_search_for_insert_sort(int *, int , int );
  13. int log_for_bin_search(int );
  14.  
  15. int main() {
  16.     int n;
  17.     scanf("%d", &n);
  18.     int *arr = create_arr(n);
  19.     print_arr(arr, n);
  20.     printf("\n");
  21.     insert_sort_with_bin_search(arr, n);
  22.     print_arr(arr, n);
  23.     return 0;
  24. }
  25.  
  26. int *create_arr(int size){
  27.     int *arr = (int *)malloc(size * sizeof(int));
  28.     srand((unsigned int)time(0));
  29.     for (int i = 0; i < size; ++i){
  30.         arr[i] = rand() % size;
  31.     }
  32.     return arr;
  33. }
  34.  
  35. void bubble_sort(int *arr, int size){
  36.     int t;
  37.     for(int i = 0; i < size - 1; ++i){
  38.         for (int j = 0; j < size - i - 1; ++j){
  39.             if (arr[j] < arr[j + 1]){
  40.                 t = arr[j];
  41.                 arr[j] = arr[j + 1];
  42.                 arr[j + 1] = t;
  43.             }
  44.         }
  45.     }
  46. }
  47.  
  48. void insert_sort(int *arr, int n){
  49.     int t, j;
  50.     for (int i = 1; i < n; ++i){
  51.         t = arr[i];
  52.         j = i - 1;
  53.         while((j >= 0) && (arr[j] > t)){
  54.             arr[j + 1] = arr[j];
  55.             arr[j] = t;
  56.             --j;
  57.         }
  58.  
  59.     }
  60. }
  61.  
  62. void insert_sort_with_bin_search(int *arr, int n){
  63.     int t, j, pos;
  64.     for (int i = 1; i < n; ++i){
  65.         t = arr[i];
  66.         j = i - 1;
  67.         pos = bin_search_for_insert_sort(arr, t, j);
  68.         while ((j >= pos) && (arr[j] >= t)){
  69.             arr[j + 1] = arr[j];
  70.             arr[j] = t;
  71.             --j;
  72.         }
  73.     }
  74. }
  75.  
  76.  
  77. int log_for_bin_search(int n){
  78.     if (n == pow(2, (int)log2(n))){
  79.         return (int)log2(n);
  80.     }
  81.     else{
  82.         return (int)log2(n) + 1;
  83.     }
  84. }
  85.  
  86.  
  87. int bin_search_for_insert_sort(int *arr, int item, int n){
  88.     int m, l = 0, r = n - 1, i = 0, ans = 0;
  89.     if (n == 0){
  90.         return 0;
  91.     }
  92.     m = (r - l) / 2;
  93.     while (i < log_for_bin_search(n)){
  94.         if (arr[m] == item){
  95.             return m;
  96.         }
  97.         else if (arr[m] > item){
  98.             r = m;
  99.             m = (r - l) / 2;
  100.         }
  101.         else {
  102.             l = m;
  103.             m = ((r - l) > 1) ? ( l + (r - l) / 2) : (l + 1);
  104.         }
  105.         ++i;
  106.     }
  107.     return m > n - 1 ? n - 1 : m;
  108. }
  109.  
  110. int bin_search(int *arr, int item, int n){
  111.     int m, l = 0, r = n - 1, i = 0;
  112.     while (i < (int)log2(n)){
  113.         m = (r - l) / 2;
  114.         if (arr[m] == item){
  115.             return 1;
  116.         }
  117.         if (arr[m] > item){
  118.             r = m;
  119.         }
  120.         else {
  121.             l = m;
  122.         }
  123.         ++i;
  124.     }
  125.     return 0;
  126. }
  127.  
  128. void print_arr(int *arr, int n){
  129.     for (int i = 0; i < n; ++i){
  130.         printf("%d\t", arr[i]);
  131.     }
  132.     printf("\n");
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement