Включить элемент в упорядоченный по убыванию массив, не нарушая упорядоченности - C (СИ)
Формулировка задачи:
Задан упорядоченный по убыванию массив F=F(i), i=1,2,...N. Включить число Z в массив F, не нарушая упорядоченности. Вывести полученный массив F=F(i), i=1,2,...,N+1
Решение задачи: «Включить элемент в упорядоченный по убыванию массив, не нарушая упорядоченности»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> //Задан упорядоченный по убыванию массив F=F(i), i=1,2,...N. Включить число Z //в массив F, не нарушая упорядоченности. Вывести полученный массив F=F(i), i=1,2,...,N+1 void Sort_on_decrease(int *p, int N)//сортирует по убыванию,N-размер массива { int i, j, max, x; for(i = 0; i < N - 1; ++i){ max = i; for(j = i + 1; j < N; ++j){ if(p[j] > p[max]) max = j; } if(max != i){ x = p[i]; p[i] = p[max]; p[max] = x; } } } int binary_search(int *p, int R, int Z)//бинарный поиск,возвращает индекс элемента,на место { //которого нужно вставить введенный с клавиатуры элемент,R-размер массива,Z-введенное число --R; int L = 0, mid; while(L < R){ mid = (L + R) / 2; if(p[mid] == Z){ break; } else{ if((p[mid] < Z)) R = mid - 1; else L = mid + 1; } if(R - L <= 8){ while(p[R] < Z) --R; mid = R + 1; break; } } return mid; } int main() { int i, j, bs, N, Z, *p; puts("Input array size:"); if(!scanf("%d", &N)){ fprintf(stderr,"%s\n", "Incorrect input!"); exit(1); } p = malloc((N + 1) * sizeof p); if(p == NULL){ fprintf(stderr,"%s\n", "Memory allocation error!"); exit(2);} for(i = 0; i < N; ++i) printf("%d ", p[i] = rand() % 1000); printf("\n"); Sort_on_decrease(p, N); for(i = 0; i < N; ++i) printf("%d ", p[i]); printf("\n"); puts("Input number Z:"); if(!scanf("%d", &Z)){ fprintf(stderr,"%s\n", "Incorrect input!"); exit(3); } bs = binary_search(p, N, Z); for(i = N + 1, j = N; j >= bs; --i, --j) p[i] = p[j]; p[bs] = Z; for(i = 0; i < N + 1; ++i) printf("%d ", p[i]); free(p); return 0; }
Объяснение кода листинга программы
- В начале кода подключаются необходимые библиотеки: stdlib.h для работы с массивами и scanf/printf для взаимодействия с пользователем.
- Затем определены две функции: Sort_on_decrease() и binary_search().
- Функция Sort_on_decrease() сортирует массив по убыванию с помощью алгоритма сортировки пузырьком.
- Функция binary_search() выполняет бинарный поиск в отсортированном массиве для нахождения места, на которое нужно вставить новый элемент.
- В функции main() сперва запрашивается размер массива, который будет заполнен случайными числами.
- Затем массив заполняется случайными числами, сортируется по убыванию и выводится на экран.
- После этого пользователю предлагается ввести число, которое нужно вставить в массив.
- Функция binary_search() находит место для вставки этого числа в отсортированный массив.
- Затем, используя цикл, элементы массива сдвигаются вправо, чтобы освободить место для нового элемента.
- В конце новый элемент вставляется на найденное место, и весь массив выводится на экран.
- В конце программы освобождается память, выделенная под массив.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д