Из двух матриц создать результирующий упорядоченный массив - C (СИ)
Формулировка задачи:
Даны два одномерных массива, упорядоченные по убыванию, сделать один массив, упорядоченный по возрастанию. Сортировать полученный массив нельзя.
Решение задачи: «Из двух матриц создать результирующий упорядоченный массив»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void printArray(int* a, int size) {
printf("\n");
for (int i = 0; i < size; ++i) printf("%4d", a[i]);
}
int intComparator(const void* p1, const void* p2) {
return (*(int*)p2 - *(int*)p1);
}
int main() {
int a[10], b[10], c[20];
srand(time(NULL));
for (int i = 0; i < 10; ++i) {
a[i] = rand() % 20;
b[i] = rand() % 20;
}
qsort((void*)a, 10, sizeof(int), intComparator);
qsort((void*)b, 10, sizeof(int), intComparator);
printArray(a, 10);
printArray(b, 10);
int i = 9, j = 9, cIndex = 0;
for (; i >= 0 || j >= 0; --i) {
for (; j >= 0 && (i < 0 || b[j] < a[i]); --j)
c[cIndex++] = b[j];
if(i >= 0)
c[cIndex++] = a[i];
}
printArray(c, 20);
getchar();
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, stdlib.h и time.h
- Определяется функция printArray, которая выводит элементы массива в формате 4-х разрядного целого числа, сдвинутого влево на 4 позиции
- Определяется функция intComparator, которая сравнивает два указателя на целые числа в пересортированном массиве
- В функции main создаются массивы a и b, заполняются случайными числами от 0 до 19
- Массивы a и b сортируются по возрастанию с помощью функции qsort и функции сравнения intComparator
- Выводятся отсортированные массивы a и b
- Инициализируются индексы i и j, которые будут использоваться в цикле
- В цикле, пока i и j не станут отрицательными, происходит заполнение массива c элементами из массива b, а затем, если i больше или равно нулю, добавляется элемент из массива a
- Выводится массив c
- В функции main добавляется вызов функции getchar, чтобы программа не закрылась сразу после вывода массива c
- Возвращается 0, что означает успешное выполнение программы