Сортировка массива методом вставки C++

У меня есть такой код. Он сортирует элементы по сумме цифр по возрастанию методом вставки. Как сортировать только нечётные элементы, а чётные оставить на своих местах.

int sumOfDigits(int num) {
int sum = 0;
while (num > 0) {
    sum += num % 10;
    num /= 10;
}
return sum;

}

void insertionSortBySumOfDigits(int arr[], int n) {
for (int i = 1; i < n; ++i) {
    int key = arr[i];
    int keySum = sumOfDigits(key);
    int j = i - 1;

    while (j >= 0 && sumOfDigits(arr[j]) > keySum) {
        arr[j + 1] = arr[j];
        --j;
    }
    arr[j + 1] = key;
}

}

int main() {
const int size = 10;
int arr[size];
setlocale(LC_ALL, "Russian");

std::cout << "Введите " << size << " целых чисел для массива:\n";
for (int i = 0; i < size; ++i) {
    std::cout << "Элемент " << i + 1 << ": ";
    
    while (!(std::cin >> arr[i])) {
        std::cout << "Пожалуйста, введите число: ";
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
}

std::cout << "Исходный массив: ";
for (int i = 0; i < size; ++i) {
    std::cout << arr[i] << " ";
}

insertionSortBySumOfDigits(arr, size);

std::cout << "\nОтсортированный массив: ";
for (int i = 0; i < size; ++i) {
    std::cout << arr[i] << " ";
}

return 0;

}


Ответы (1 шт):

Автор решения: MBo

Попробуйте (тест C-варианта):

void insertionSortBySumOfDigits(int arr[], int n) { 
    int t, key, j, i = 0;
    while (i < n && (arr[i]&1)==0)
        i++;
    if (i==n)
        return;
    i++;
    while (i < n) {
        while (i < n && (arr[i]&1)==0)
            i++;
        if (i==n)
            break;
        key = arr[i];
        t = i;
        j = i - 1;
        while (j >=0) {
            while (j>=0 && (arr[j]&1)==0)
                j--;
            if (j < 0 || arr[j]<= key)
                break;
            arr[t] = arr[j];
            t = j;
            j--;
        }
        arr[t] = key;
        i++;
    }
 }
→ Ссылка