Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<time.h>
- void fillArrayRange(int arr[], int size, int from, int to);
- void printArr(int ar[], int size);
- void sortDescending(int ar[], int size);
- void swap(int arr[], int size, int i, int j);
- void printArr(int ar[], int size);
- void sortInRange(int ar[], int size, int start, int end);
- void evenFirst(int ar[], int size);
- void evenFirst2(int ar[], int size);
- int flag(int arr[], int size);
- int search(int arr[], int size, int number);
- int main() {
- int size = 10, from = -10, to = 10, start = -15, end = 10, number = -2;
- int array[size];
- //=============Check values==================
- if (size > 1 || from > to)
- fillArrayRange(array, size, from, to);
- else {
- printf("Invalid value");
- return 0;
- }
- //=============END Check values==============
- printArr(array, size);
- printf("============1 task============\n");
- sortDescending(array, size);
- printArr(array, size);
- printf("============2 task============\n");
- sortInRange(array, size, start, end);
- printArr(array, size);
- printf("============3 task============\na)");
- evenFirst(array, size);
- printArr(array, size);
- printf("b)");
- evenFirst2(array, size);
- printArr(array, size);
- printf("============4 task============\n");
- flag(array, size) > 0 ? printf("Massive is sorted\n") : printf(
- "Massive is unsorted\n");
- search(array, size, number) >= 0 ? printf("Index of number = %d\n", search(
- array, size, number)) : printf("Number %d is not in massive\n",
- number);
- return 0;
- }
- int search(int arr[], int size, int number) {
- int left = 0, right = size - 1, middle, index = -1;
- if (flag(arr, size) == 1) {
- while (left <= right) {
- middle = (left + right) / 2;
- if (arr[middle] == number) {
- index = middle;
- break;
- }
- if (number < arr[middle]) {
- right = middle - 1;
- } else {
- left = middle + 1;
- }
- }
- } else if (flag(arr, size) == 2) {
- while (left <= right) {
- middle = (left + right) / 2;
- if (arr[middle] == number) {
- index = middle;
- break;
- }
- if (number < arr[middle]) {
- left = middle + 1;
- } else {
- right = middle - 1;
- }
- }
- } else {
- int i;
- for (i = 0; i < size; i++) {
- if (arr[i] == number)
- index = i;
- }
- }
- return index;
- }
- int flag(int arr[], int size) {
- int i, countUp = 0, countDown = 0;
- for (i = 1; i < size; i++) {
- if (arr[i - 1] <= arr[i])
- countUp++;
- if (arr[i - 1] >= arr[i])
- countDown++;
- }
- if (countUp == size - 1)
- return 1; //по возрастающей
- else if (countDown == size - 1)
- return 2; //по убывающей
- else
- return 0; //не отсортирован
- }
- void evenFirst2(int ar[], int size) {
- int i, j, min, minIndex;
- for (i = 0; i < size; i++) {
- min = ar[i];
- minIndex = i;
- for (j = i + 1; j < size; j++) {
- if (ar[j] % 2 == 0 && ar[j] < min) {
- min = ar[j];
- minIndex = j;
- }
- }
- if (i != minIndex) {
- swap(ar, size, i, minIndex);
- }
- }
- }
- void evenFirst(int ar[], int size) {
- int i, j, min, minIndex;
- for (i = 0; i < size; i++) {
- min = ar[i];
- minIndex = i;
- for (j = i + 1; j < size; j++) {
- if (ar[j] % 2 == 0) {
- min = ar[j];
- minIndex = j;
- }
- }
- if (i != minIndex) {
- swap(ar, size, i, minIndex);
- }
- }
- }
- void sortInRange(int ar[], int size, int start, int end) {
- int i, j, min, minIndex;
- if (start > end || start < 0 || end > size - 1) {
- printf("Invalid value, massive without changes\n");
- } else {
- for (i = start; i <= end; i++) {
- min = ar[i];
- minIndex = i;
- for (j = i + 1; j <= end; j++) {
- if (ar[j] < min) {
- min = ar[j];
- minIndex = j;
- }
- }
- if (i != minIndex) {
- swap(ar, size, i, minIndex);
- }
- }
- }
- }
- void sortDescending(int ar[], int size) {
- int i, j, max, maxIndex;
- for (i = 0; i < size; i++) {
- max = ar[i];
- maxIndex = i;
- for (j = i + 1; j < size; j++) {
- if (ar[j] > max) {
- max = ar[j];
- maxIndex = j;
- }
- }
- if (i != maxIndex) {
- swap(ar, size, i, maxIndex);
- }
- }
- }
- void swap(int arr[], int size, int i, int j) {
- int temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
- void fillArrayRange(int arr[], int size, int from, int to) {
- srand(time(NULL));
- int i;
- for (i = 0; i < size; i++) {
- arr[i] = from + rand() % (to + 1 - from);
- }
- }
- void printArr(int ar[], int size) {
- int i;
- for (i = 0; i < size; i++) {
- printf("%d ", ar[i]);
- }
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement