@zhuravlev125

Как отсортировать массив с чередованием по два знака?

есть массив целых чисел, количество элементов массива кратное 4. Как отсортировать массив через два знака что бы шли два положительных элемента, затем два отрицательны (++--) и т.д.
Есть алгоритм сортировки по знаку +-+-+- и т.д
int С[n];
for (int i = 0, pi = 0, ni = 1; i < n; i++) {
if (A[i] >= 0) {
С[pi] = A[i];
pi += 2;
}
else {
С[ni] = A[i];
ni += 2;
}
}
memcpy(A, С, sizeof(int) * n);
Но как реализовать через два не знаю. Подскажите что-то
  • Вопрос задан
  • 452 просмотра
Пригласить эксперта
Ответы на вопрос 2
1. Отфильтровать положительные элементы в один новый std::vector, отрицательные в другой std::vector
2. Выводить группами по 4 элемента: 2 из первого вектора, 2 из второго
Ответ написан
@zhuravlev125 Автор вопроса
Может кому пригодится, Вопрос решен.
vector positiv;
vector negativ;
int result[12];

for (int i = 0; i < 12; i++) {
if (A[i] >= 0) {
positiv.push_back(A[i]);
}
}

for (int i = 0; i < 12; i++) {
if (A[i] < 0) {
negativ.push_back(A[i]);
}
}

bool value = true;
int iPos = 0;
int iNeg = 0;
for (int i = 0; i < 12; i = i + 2)
{
if (value)
{
result[i] = positiv[iPos];
result[i + 1] = positiv[iPos + 1];
iPos = iPos + 2;
value = false;
}
else
{
result[i] = negativ[iNeg];
result[i + 1] = negativ[iNeg + 1];
iNeg = iNeg + 2;
value = true;
}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы