Включить элемент в упорядоченный по убыванию массив, не нарушая упорядоченности - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задан упорядоченный по убыванию массив F=F(i), i=1,2,...N. Включить число Z в массив F, не нарушая упорядоченности. Вывести полученный массив F=F(i), i=1,2,...,N+1

Решение задачи: «Включить элемент в упорядоченный по убыванию массив, не нарушая упорядоченности»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //Задан упорядоченный по убыванию массив F=F(i), i=1,2,...N. Включить число Z
  4. //в массив F, не нарушая упорядоченности. Вывести полученный массив F=F(i), i=1,2,...,N+1
  5. void Sort_on_decrease(int *p, int N)//сортирует по убыванию,N-размер массива
  6. {
  7.     int i, j, max, x;
  8.     for(i = 0; i < N - 1; ++i){
  9.         max = i;
  10.         for(j = i + 1; j < N; ++j){
  11.         if(p[j] > p[max])
  12.             max = j;
  13.         }
  14.         if(max != i){
  15.             x = p[i]; p[i] = p[max];
  16.             p[max] = x;
  17.         }
  18.     }
  19. }
  20. int binary_search(int *p, int R, int Z)//бинарный поиск,возвращает индекс элемента,на место
  21. { //которого нужно вставить введенный с клавиатуры элемент,R-размер массива,Z-введенное число
  22.     --R;
  23.     int L = 0, mid;
  24.     while(L < R){
  25.         mid = (L + R) / 2;
  26.         if(p[mid] == Z){
  27.             break;
  28.         }
  29.         else{
  30.             if((p[mid] < Z))
  31.                 R = mid - 1;
  32.             else
  33.                 L = mid + 1;
  34.         }
  35.         if(R - L <= 8){
  36.             while(p[R] < Z)
  37.                 --R;
  38.             mid = R + 1;
  39.             break;
  40.         }
  41.     }
  42.     return mid;
  43. }
  44. int main()
  45. {
  46.     int i, j, bs, N, Z, *p;
  47.     puts("Input array size:");
  48.     if(!scanf("%d", &N)){
  49.         fprintf(stderr,"%s\n", "Incorrect input!");
  50.         exit(1);
  51.     }
  52.     p = malloc((N + 1) * sizeof p);
  53.     if(p == NULL){
  54.         fprintf(stderr,"%s\n", "Memory allocation error!");
  55.         exit(2);}
  56.     for(i = 0; i < N; ++i)
  57.         printf("%d ", p[i] = rand() % 1000);
  58.     printf("\n");
  59.     Sort_on_decrease(p, N);
  60.     for(i = 0; i < N; ++i)
  61.         printf("%d ", p[i]);
  62.     printf("\n");
  63.     puts("Input number Z:");
  64.     if(!scanf("%d", &Z)){
  65.         fprintf(stderr,"%s\n", "Incorrect input!");
  66.         exit(3);
  67.     }
  68.     bs = binary_search(p, N, Z);
  69.     for(i = N + 1, j = N; j >= bs; --i, --j)
  70.         p[i] = p[j];
  71.     p[bs] = Z;
  72.     for(i = 0; i < N + 1; ++i)
  73.         printf("%d ", p[i]);
  74.     free(p);
  75.     return 0;
  76. }

Объяснение кода листинга программы

  1. В начале кода подключаются необходимые библиотеки: stdlib.h для работы с массивами и scanf/printf для взаимодействия с пользователем.
  2. Затем определены две функции: Sort_on_decrease() и binary_search().
  3. Функция Sort_on_decrease() сортирует массив по убыванию с помощью алгоритма сортировки пузырьком.
  4. Функция binary_search() выполняет бинарный поиск в отсортированном массиве для нахождения места, на которое нужно вставить новый элемент.
  5. В функции main() сперва запрашивается размер массива, который будет заполнен случайными числами.
  6. Затем массив заполняется случайными числами, сортируется по убыванию и выводится на экран.
  7. После этого пользователю предлагается ввести число, которое нужно вставить в массив.
  8. Функция binary_search() находит место для вставки этого числа в отсортированный массив.
  9. Затем, используя цикл, элементы массива сдвигаются вправо, чтобы освободить место для нового элемента.
  10. В конце новый элемент вставляется на найденное место, и весь массив выводится на экран.
  11. В конце программы освобождается память, выделенная под массив.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы