Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void printArray(int ar[], int size);
  6. void fillArray(int ar[], int size, int from, int to);
  7. void swap(int arr[], int i, int j);
  8. int bubble(int arr[], int size);
  9. int binarySearch(int arr[], int size, int number);
  10. void sortDescending(int ar[], int size);
  11. int bubbleDescending(int arr[], int size);
  12. void sortInRange(int arr[], int size, int start, int end);
  13. int search(int ar[], int size, int number);
  14. void evenFirst(int arr[], int size);
  15. int evenBubbleSort(int arr[], int size);
  16. int searchNumberNotSorted(int arr[], int size, int number);
  17. int main() {
  18.     int size = 10;
  19.     int arr[size];
  20.     int start = 0, end = 9, number = 7, from =0, to=20;
  21.     if (size<=0|| from>= to) {printf("data not valid\n"); return 1;}
  22.     fillArray(arr, size, 0, 100);
  23.     printArray(arr, size);
  24.     printf("number %d index   = %d\n", number, search(arr, size, number)); //search before sorting
  25.     printf("SortDecsending\n");
  26.     sortDescending(arr, size);
  27.     printArray(arr, size);
  28.     printf("Even first\n");
  29.     evenFirst(arr, size);
  30.     printArray(arr, size);
  31.     printf("Sort in range %d : %d\n", start, end);
  32.     sortInRange(arr, size, start, end);
  33.     printArray(arr, size);
  34.  
  35.     return 1;
  36. }
  37. int search(int ar[], int size, int number) {
  38.     int i, flag = 0;
  39.     for (i = 0; i < size - 1; i++) {
  40.         if (ar[i] > ar[i + 1]) {
  41.             for (i = 0; i < size - 1; i++) {
  42.                 if (ar[i] < ar[i + 1]) {
  43.                     flag = 1; //not sorted
  44.                     break;
  45.                 }
  46.             }
  47.             break;
  48.         }
  49.     }
  50.     switch (flag) {
  51.     case 1:
  52.         return searchNumberNotSorted(ar, size, number);
  53.  
  54.     case 0:
  55.         return binarySearch(ar, size, number);
  56.  
  57.     }
  58. }
  59.  
  60. int searchNumberNotSorted(int arr[], int size, int number) {
  61.     int i;
  62.     for (i = 0; i < size; i++) {
  63.         if (arr[i] == number) {
  64.             return i;
  65.         }
  66.     }
  67.     return -1;
  68. }
  69. int binarySearch(int arr[], int size, int number) {
  70.     int middle, left = 0, right = size - 1;
  71.     if (arr[left] <= arr[right]) {
  72.         while (left <= right) {
  73.             middle = (left + right) / 2;
  74.             if (arr[middle] == number)
  75.                 return middle;
  76.             if (arr[middle] < number)
  77.                 left = middle + 1;
  78.             else
  79.                 right = middle - 1;
  80.         }
  81.     } else {
  82.         while (left <= right) {
  83.             middle = (left + right) / 2;
  84.             if (arr[middle] == number)
  85.                 return middle;
  86.             if (arr[middle] > number)
  87.                 left = middle + 1;
  88.             else
  89.                 right = middle - 1;
  90.         }
  91.     }
  92.     return -1;
  93. }
  94.  
  95. void evenFirst(int arr[], int size) {
  96.     int start = 0, end = 0;
  97.     while (evenBubbleSort(arr, size))
  98.         ;
  99.     while (arr[end] % 2 == 0 && end < size)
  100.         end++;
  101.     sortInRange(arr, size, start, end - 1);
  102.     if (end < size - 1)
  103.         sortInRange(arr, size, end, size - 1);
  104. }
  105.  
  106. int evenBubbleSort(int arr[], int size) {
  107.     int i, flag = 0;
  108.     for (i = 0; i < size - 1; i++) {
  109.         if (arr[i] % 2 != 0 && arr[i + 1] % 2 == 0) {
  110.             swap(arr, i, i + 1);
  111.             flag = 1;
  112.         }
  113.     }
  114.     return flag;
  115. }
  116. void sortDescending(int ar[], int size) {
  117.     while (bubbleDescending(ar, size))
  118.         ;
  119. }
  120. int bubbleDescending(int ar[], int size) {
  121.     int i, flag = 0;
  122.     for (i = size - 1; i > 0; i--) {
  123.         if (ar[i] > ar[i - 1]) {
  124.             swap(ar, i, i - 1);
  125.             flag = 1;
  126.         }
  127.     }
  128.     return flag;
  129. }
  130.  
  131. void sortInRange(int arr[], int size, int start, int end) {
  132.     int i, j, min, minIndex;
  133.     if (start < 0 || start >= end || end >= size) {
  134.         printf("error data start = %d end = %d\n", start, end);
  135.         return;
  136.     }
  137.     for (i = start; i <= end; i++) {
  138.  
  139.         min = arr[i];
  140.         minIndex = i;
  141.         for (j = i + 1; j <= end; j++) {
  142.             if (arr[j] < min) {
  143.                 min = arr[j];
  144.                 minIndex = j;
  145.             }
  146.         }
  147.         if (i != minIndex)
  148.             swap(arr, i, minIndex);
  149.     }
  150. }
  151. void swap(int arr[], int i, int j) {
  152.     int temp = arr[i];
  153.     arr[i] = arr[j];
  154.     arr[j] = temp;
  155. }
  156.  
  157. void fillArray(int ar[], int size, int from, int to) {
  158.     if (size <= 0)
  159.     srand(time(NULL));
  160.     int i;
  161.     for (i = 0; i < size; i++) {
  162.         ar[i] = from + rand() % (to + 1 - from);
  163.  
  164.     }
  165.     printf("\n");
  166. }
  167. void printArray(int ar[], int size) {
  168.     int i;
  169.     for (i = 0; i < size; i++)
  170.         printf("%d ", ar[i]);
  171.     printf("\n");
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement