C/C++.
Преобразовать массив так, чтобы сначала шли нулевые элементы, а затем все остальные.

7 Авг 2019 в 19:43
414 +1
0
Ответы
1

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

Вот пример кода на C/C++, который выполняет данное преобразование:

#include <iostream>
void moveZeroes(int* nums, int numsSize) {
int zeroIndex = 0;
for (int i = 0; i < numsSize; i++) {
if (nums[i] == 0) {
// Смена местами нулевого элемента и элемента, на который указывает zeroIndex
int temp = nums[zeroIndex];
nums[zeroIndex] = nums[i];
nums[i] = temp;
zeroIndex++;
}
}
}
int main() {
int arr[] = {0, 1, 0, 3, 12};
int n = sizeof(arr) / sizeof(arr[0]);
moveZeroes(arr, n);
std::cout << "Преобразованный массив: ";
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
return 0;
}

Этот код работает следующим образом: он проходит по массиву, и когда находит ненулевой элемент, меняет его местами с нулевым элементом, на который указывает zeroIndex. Нулевой элемент и non-zero элемент меняются местами, после чего zeroIndex увеличивается на 1. Таким образом, все нулевые элементы будут находиться в начале массива.

20 Апр 2024 в 15:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир