C ++ Добавляя из одного массива в другой, просматривайте другой массив каждый раз, когда я добавляю в него элемент - PullRequest
1 голос
/ 14 апреля 2011

Привет всем

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

Я делаю это для целей сортировки, и я очень новичок в этом.

Я знаю, что должен использовать цикл for

int numbers[6]; //main array
int tempArr[6]; //temporary array I would like to add elements to

for(int i = 0; i < 6; i++)
{
//if temp element just added is >, < or = any element in temp array
//do stuff
}

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

Надеюсь, вы можете помочь, я смотрел везде, и, кажется, ничто не соответствует тому, что мне нужно: (

Ответы [ 4 ]

1 голос
/ 14 апреля 2011

Мне кажется, вам стоит подумать об алгоритме Insertion Sort . Каждый раз, когда вам нужно добавить новое значение, просто поместите его в конец вашего текущего временного массива и перемещайте значение вниз по массиву, пока не найдете его место. Зная текущий индекс для этого элемента, вы сможете найти все элементы. <или> чем этот.

Этот алгоритм имеет O (n ^ 2) сложность в среднем случае. Вы можете достичь O (n log n), используя двоичные деревья.

0 голосов
/ 14 апреля 2011

Вы можете сделать это очень легко с помощью другого цикла.Если вы уверены, что у вас всегда будет 6 элементов в вашем файле (это то, что у вас в настоящее время зависит от размера ваших массивов выше), вы можете сделать что-то вроде этого:

for (i = 0; i < 6; i++)
{
   numbers[i] = temp[i];

   for (j = 0; j < count; j++)
   {
      if (temp[i] > temp[j])
         // Do something
      if (temp[i] < temp[j])
         // Do something else
      if (temp[i] == temp[j])
         // Do something else
   }
   count++;
}

Потребуются дополнительные вещинастраивается, если количество входных элементов является переменным, но в противном случае один за другим будет перемещать каждый элемент в «числах» в массив «temp», и при каждом перемещении он будет просматривать весь список других элементови убедитесь, что новое значение меньше, больше или равно только что добавленному.

РЕДАКТИРОВАТЬ: Если вы пытаетесь отсортировать элементы в tempArray, то ищите сортировку вставки, как другиепредложил.Если вы просто хотите получить элементы в numberArray в порядке возрастания (или убывания), вы можете посмотреть на сортировку пузырьков, что, вероятно, будет проще для нового программиста, поскольку для него не требуется второй массив.

0 голосов
/ 14 апреля 2011

Вам не хватает двух вещей:

  • Способ узнать, сколько элементов в массиве. (Массивы C ++ имеют фиксированный размер (6 для обоих в вашем случае), но предположительно tempArr начинается пустым.)
  • Способ вставки элемента в массив (что вы будете делать с tempArr).

.

//if temp element just added is >, < or = any element in temp array

Любой элемент всегда будет>, <или = для любого другого элемента. (Ну, за исключением случаев, когда есть некоторые странные перегрузки операторов.) </p>

Уточните свой псевдокод. И, возможно, добавить вызов функции или два.

0 голосов
/ 14 апреля 2011

Я думаю, вам нужен std::set:

std::set< int > temp;
for (int i(0); i < (sizeof(numbers) / sizeof(numbers[0])); ++i)
{
    temp.insert(numbers[i]);
}

set будет эффективно сортировать и удалять дубликаты

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