
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец
с сохранением порядка следования. Дополнительный массив заводить не разрешается. 

Ответы на вопрос

===== PascalABC.NET =====
begin
var a := ArrRandom(4, -10, 20);
a.Println;
// ищем j - позицию первого неотрицательного элемента
var j := -1;
for var i := 0 to a.High do
if a[i] >= 0 then // нашли
begin
j := i;
break
end;
if j > -1 then
begin
for var i := j + 1 to a.High do
if a[i] < 0 then
begin
for var k := i downto j + 1 do
Swap(a[k], a[k-1]);
j += 1;
if j >= a.High then break;
end;
a.Println
end
else
Println('Нет положительных элементов')
end.



Для решения этой задачи можно использовать алгоритм двух указателей. Один указатель будет двигаться с начала массива вправо, а другой - с конца массива влево. Оба указателя будут идти навстречу друг другу и менять элементы местами, пока не встретятся.
Вот алгоритм решения этой задачи:
- Инициализируйте переменные "left" и "right" со значениями 0 и размером массива минус 1 соответственно.
- Пока left <= right:
- Если arr[left] < 0, увеличьте left на 1.
- Если arr[right] >= 0, уменьшите right на 1.
- Если arr[left] >= 0 и arr[right] < 0, поменяйте местами arr[left] и arr[right].
- В результате выполнения алгоритма все отрицательные элементы будут перемещены в начало массива, а остальные элементы - в конец, с сохранением порядка следования.
Вот пример кода на Python, реализующего описанный алгоритм:
pythondef move_negative_elements(arr):
left = 0
right = len(arr) - 1
while left <= right:
if arr[left] < 0:
left += 1
elif arr[right] >= 0:
right -= 1
elif arr[left] >= 0 and arr[right] < 0:
arr[left], arr[right] = arr[right], arr[left]
left += 1
right -= 1
return arr
Вы можете вызвать функцию move_negative_elements
и передать ей ваш одномерный массив. Она вернет массив с перемещенными отрицательными элементами в начало и положительными (или нулевыми) - в конец.


Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili