Задать вопрос
@Ening_apps

Как выборочно отсортировать массив вставками?

Доброго времени суток. Дана такая задача:
Отсортировать четные числа в массиве методом вставок по убыванию, нечетные по возрастанию, нулевые оставить на прежних местах. Доп. массивов не использовать.
Что-то не получается у меня никак придумать и реализовать решение.Подскажите, пожалуйста, что можно сделать. Заранее большое спасибо за ответы.
Вот, что я накрутил.
void sort(int arrLenth, int arr[]){

	int buf, index;

    for (int i = 1; i < arrLenth; i++)
    {
        buf = arr[i];
        index = i - 1;
        while(index >= 0 && arr[index] < buf )
        {
			if(arr[i]%2!=0 && arr[index+1]%2!=0)
				continue;
            arr[index+1] = arr[index];
            index--; 
        }
        arr[index+1] = buf;
    }
	for (int i = 1; i < arrLenth; i++)
    {
        buf = arr[i];
        index = i - 1;
        while(index >= 0 && arr[index] > buf )
        {
			if(arr[i]%2==0 && arr[index+1]%2==0)
				continue;
            arr[index+1] = arr[index];
            index--; 
        }
        arr[index+1] = buf;
    }

	
}
  • Вопрос задан
  • 234 просмотра
Подписаться 2 Простой 2 комментария
Решения вопроса 1
longclaps
@longclaps
#include <stdio.h>

void insertodd(int arr[], int hi) {
    int a = arr[hi];
    for (int lo = hi - 1; lo >= 0; lo--) {
        if (arr[lo] & 1) {
            if (a < arr[lo]) {
                arr[hi] = arr[lo];
                hi = lo;
            } else break;
        }
        arr[hi] = a;
    }
}

void inserteven(int arr[], int hi) {
    int a = arr[hi];
    for (int lo = hi - 1; lo >= 0; lo--) {
        if (arr[lo] && !(arr[lo] & 1)) {
            if (a > arr[lo]) {
                arr[hi] = arr[lo];
                hi = lo;
            } else break;
        }
        arr[hi] = a;
    }
}

void customsort(int arr[], int len) {
    for (int i = 1; i < len; i++) {
        if (arr[i] & 1) insertodd(arr, i);
        else if (arr[i]) inserteven(arr, i);
    }
}

int main() {
    int arr[6] = {1, 2, 5, 3, 0, 4};
    customsort(arr, 6);
    for (int i = 0; i < 6; i++)
        printf("%d, ", arr[i]);
    return 0;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы