Как отсортировать только четные элементы массива
Перейти к содержимому

Как отсортировать только четные элементы массива

  • автор:

Сортировка четных и нечетных элементов c++

Есть задача: В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  1. произведение положительных элементов массива;
  2. сумму элементов массива, расположенных до минимального элемента.
  3. упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах.

Я сделал все 3 пункта, но работает все кроме упорядовачивания, не могли бы подсказать, в чем проблема?

cpp questions's user avatar

В коде, где вы делите массив на четные и нечетные элементы, вы забыли увеличивать счетчик b

Кстати эти два условия можно объединить в следующую конструкцию:

Этот способ избавит от лишнего условия и улучшит читаемость кода.

Кроме прочего, вы забываете удалять выделенную динамически память. Использование выражений new / new[] требует зеркального использования выражений delete / delete[] . Добавьте в конце функции main :

Четные и нечетные элементы в массиве на С++?

Mag1str

Mag1str, так я и спрашиваю, что тебе непонятно в сортировке четных и нечетных элементов массива?
Какие у тебя есть предположения по решению задачи?

Твой вопрос сейчас целиком попадает под П5.12 регламента работы сервиса. Мои уточняющие вопросы нужды для того чтобы ты мог исправить ситуацию фактического нарушения правил.

qsort(): Сортировка только четных чисел массива

Я пытаюсь использовать функцию qsort() , чтобы сортировать только четные числа массива (шансы остаются в их положениях).

Например, если у меня есть массив:

После сортировки вы получите:

Моя интуиция была только для того, чтобы сделать вид, когда оба числа, a и b являются четными.

Это моя попытка:

Кажется невозможным создать функцию сравнения для вашей цели, но вы можете сделать копию четных чисел, отсортировать ее с помощью qsort и отправить отсортированное подмножество над четными числами исходного массива:

Также обратите внимание, что ваша исходная функция сравнения использует трюк для сравнения целых чисел, которые не выполняются для больших значений. Разница двух целых чисел может быть вне диапазона int . Поэтому возвращение l — r может быть неверным для многих значений l и r .

Например, l=INT_MIN и r=1 вернет INT_MIN-1 , вычитание вызывает арифметическое переполнение, которое вызывает неопределенное поведение, а в существующих архитектурах дополнений 2s оценивается как INT_MAX , положительное значение, хотя INT_MIN < 1 .

К сожалению, qsort не поддерживает ничего подобного; для любых двух элементов функция сравнения должна возвращать один из трех результатов:

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

И, что важно, функция должна делать это, используя только значения двух своих аргументов; он не знает индексов массива, из которых они пришли.

Сортировка по четным и нечетным массивам

Сортировка по четным и нечетным массивам

Преобразование одного массива в 2 четных и нечетных массива

У меня есть массив, в котором есть числа. Теперь я хочу отсортировать четные числа в отдельном массиве, а нечетные — в отдельном. Есть ли API для этого? Я пробовал вот так

  • Домашнее задание? Пометьте это так .
  • Что ты пробовал? создать два разных массива с нечетными числами и четными числами, отсортировать два массива. Есть накладные расходы на пространство — вы говорите о миллионе чисел?
  • Действительно просто и понятно. +1 🙂

Сделать это с помощью Guava просто.

  • Использовать Ints.asList создать List живой вид на int[]
  • Определить Function isOdd
  • Использовать Ordering это сравнивает onResultOf(isOdd) , естественно (т.е. false будет первый true )
  • Если необходимо, compound это с Ordering.natural()

Обратите внимание, что сначала отображаются все четные числа, а затем все нечетные числа. В каждой группе числа отсортированы естественным образом.

внешние ссылки

  • polygenelubricants.com — Написание более элегантной логики сравнения с помощью Guava's Ordering

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

Затем вы можете преобразовать список Integer в отсортированный массив, если int, как показано ниже:

или если отсортированный List это то, что вам нужно, просто сделайте это:

Прежде всего необходимо знать следующее:

  • Вы должны инициализировать массив перед его использованием. Например int[] even_sort = new int[3];
  • В java массивы имеют статический размер. Это означает, что вы не сможете добавить столько элементов, сколько захотите. Вы должны выбрать размер заранее. Вам следует взглянуть на Коллекции Java, это хороший способ избавиться от этого «правила» Java-способом.
  • В Arrays.sort() применяется только к массивам. Вот array_sort[i] является int
  • Arrays.sort() сортирует массив, но ничего не возвращает.

Если вы действительно хотите использовать массивы (но не должны), вы можете сделать что-то вроде этого, чтобы изменить их размер:

Другой способ — создать служебный метод, который использует отражение для создания нового массива:

Итак, если вы все еще хотите использовать массив по некоторым причинам (но вам все равно не следует), вот код для фильтрации, изменения размера и сортировки вашего массива.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *