Верно ли, что два массива отличаются не более чем порядком следования элементов? - 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;
}

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

  1. #include
  2. #include
  3. #include
  4. #include
  5. int compare(const void a, const void b)
  6. Данная функция сравнивает два указателя на int, возвращает разницу между ними.
  7. bool CompareArrays(int arr1, const size_t m, int arr2, const size_t n)
  8. Эта функция сравнивает два массива int, используя функцию сортировки qsort() для приведения их к одинаковому порядку элементов. Затем сравнивает отсортированные массивы с помощью функции memcmp().
  9. int main(void)
  10. В этой функции определены два массива int, которые будут сравниваться.
  11. Также определены еще два массива int, которые будут использоваться для проверки корректности работы функции сравнения массивов.
  12. printf(values1 & values2 : %s\n, CompareArrays(values1, m, values2, n) ? true : false);
  13. Выводит на экран результат сравнения первых двух массивов.
  14. printf(values3 & values4 : %s\n, CompareArrays(values3, x, values4, y) ? true : false);
  15. Выводит на экран результат сравнения вторых двух массивов.
  16. return 0;
  17. Завершает работу программы.

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


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

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

7   голосов , оценка 3.429 из 5
Похожие ответы