Сортировать по росту отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах с++
Сортировать по росту отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах. Я не могу понять как отсортировать элементы на нечетных местах. Помогите пожалуйста.
void Sort(int* parr, const int size)
{
for (int i = 1; i < size; i++)
{
if ((i % 2) == 0)
{
int tmp = parr[i];
int j = 0;
while (tmp > parr[j])
j++;
for (int k = i - 1; k >= j; k--)
parr[k + 1] = parr[k];
parr[j] = tmp;
}
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну вот смотрите. Возьмем простейшую пузырьковую сортировку:
void swap(int&a, int&b)
{
int t = a; a = b; b = t;
}
void BubbleSort(int * a, int n)
{
for(int b = 0, e = n-1; b != e; ++b)
for(int k = e, j = k--; j != b; j = k--)
if (a[j] < a[k]) swap(a[j],a[k]);
}
А теперь будем идти с шагом 2 — только по первому, третьему и далее элементам (индексы 0, 2, ...):
void oddBubbleSort(int * a, int n)
{
for(int b = 0, e = ((n-1)/2)*2; b != e; b+=2)
for(int k = e-2, j = e; j != b; j = k, k -= 2)
if (a[j] < a[k]) swap(a[j],a[k]);
}
Вот и все. Главное — правильно посчитать последний элемент :)
Надеюсь, теперь для четных напишете сами?
Пример работы — здесь: https://ideone.com/13CCDo