Как сделать перестановки в массиве? - PullRequest
0 голосов
/ 13 октября 2019

Я новичок в C, и я пытался написать функцию, которая будет делать перестановки в массиве, учитывая массив, который имеет новую позицию каждого элемента.

Пример того, что я быхотелось бы иметь:

int newPositions[] = {3,1,5,2,4};
int arr[] = {20,30,-1,9,1};
>> {-1,20,1,30,9}

Я пришел с Java, поэтому у меня были базовые функции, о которых мы подумали, пытаясь это сделать, но я был удивлен, когда увидел, что не могу вернуть массив вС, и я пытаюсь найти наилучший способ сделать это, не используя слишком много памяти. Я думал о копировании массива, но есть ли другое решение?

Спасибо

1 Ответ

0 голосов
/ 13 октября 2019

Вот как это может выглядеть:

#include <string.h>

void permutate(int** array, int* newPositions, int count)
{
    int* arrayCopy = malloc(sizeof(int) * count);
    memcpy(arrayCopy, array, sizeof(int) * count);

    for (int i = 0; i < count; i++)
    {
        array[i] = arrayCopy[newPositions[i] - 1];
    }

    free(arrayCopy);
}

Имейте в виду, что массивы в C не знают их длины (вот почему count должны быть пропущены), поэтому, если есть несоответствие между массивами и/ или size, ваша программа сделает что-то неожиданное или вылетит.

Есть много деталей, которые нужно знать о массивах и указателях на C. Пожалуйста, внимательно посмотрите на эту главу знаменитойC-FAQ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...