Верно ли, что два массива отличаются не более чем порядком следования элементов? - C (СИ)
Формулировка задачи:
2. Верно ли, что два массива которые могут содержать повторяющиеся элементы отличаются не более чем порядком их следования.
можно на си++
Решение задачи: «Верно ли, что два массива отличаются не более чем порядком следования элементов?»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
int compare(const void* a, const void* b)
{
return (*(int*)a - *(int*)b);
}
bool CompareArrays(int* arr1, const size_t m, int* arr2, const size_t n)
{
if (m != n) return false;
qsort(arr1, m, sizeof(*arr1), compare);
qsort(arr2, n, sizeof(*arr2), compare);
return (memcmp(arr1, arr2, m) == 0);
}
int main(void)
{
int values1[] = {40, 10, 100, 90, 20, 50, 25};
int values2[] = {40, 25, 100, 20, 90, 50, 10};
size_t m = sizeof(values1) / sizeof(*values1);
size_t n = sizeof(values2) / sizeof(*values2);
int values3[] = {40, 10, 100, 90, 20, 50, 25};
int values4[] = {40, 10, 100, 20, 90, 50, 10};
size_t x = sizeof(values3) / sizeof(*values3);
size_t y = sizeof(values4) / sizeof(*values4);
printf("values1 & values2 : %s\n", CompareArrays(values1, m, values2, n) ? "true" : "false");
printf("values3 & values4 : %s\n", CompareArrays(values3, x, values4, y) ? "true" : "false");
return 0;
}
Объяснение кода листинга программы
- #include
- #include
- #include
- #include
- int compare(const void a, const void b)
- Данная функция сравнивает два указателя на int, возвращает разницу между ними.
- bool CompareArrays(int arr1, const size_t m, int arr2, const size_t n)
- Эта функция сравнивает два массива int, используя функцию сортировки qsort() для приведения их к одинаковому порядку элементов. Затем сравнивает отсортированные массивы с помощью функции memcmp().
- int main(void)
- В этой функции определены два массива int, которые будут сравниваться.
- Также определены еще два массива int, которые будут использоваться для проверки корректности работы функции сравнения массивов.
- printf(
values1 & values2 : %s\n, CompareArrays(values1, m, values2, n) ?true:false); - Выводит на экран результат сравнения первых двух массивов.
- printf(
values3 & values4 : %s\n, CompareArrays(values3, x, values4, y) ?true:false); - Выводит на экран результат сравнения вторых двух массивов.
- return 0;
- Завершает работу программы.