Найти 2 нечетных минимальных элемента в массиве

Помогите решить проблему

void findMin(int* arr, int size) {
    int min1, min2;
    min1 = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] % 2 == 1) {
            if (arr[min1] > arr[i]) {
                min1 = i;
            }
        }
        else
            continue;
        printf("%d\n", min1);
    }
    min2 = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] % 2 == 1) {
            if (arr[i] < arr[min2] && arr[i] != arr[min1]) {// второй минимальный элемент
                min2 = i;
            }
        }
        else
            continue;
        printf("%d--\n", min2);
    }
    /*sorting(arr, size, min1, min2);*/
}

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

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

Можно, конечно, и в один проход, но раз вы решили в два - то это можно сделать, например, так:

int getOddMin(int* a, int size, int exclude)
{
    int idx = -1, m;
    for(int i = 0; i < size; ++i)
    {
        if (a[i]%2==0 || i == exclude) continue;
        if (idx == -1 || a[i] < m)
        {
            m = a[i];
            idx = i;
        }
    };
    return idx;
}

void findMin(int* a, int size, int* idx1, int * idx2)
{
    *idx2 = -1;
    *idx1 = getOddMin(a,size,-1);
    if (*idx1 == -1) return;
    *idx2 = getOddMin(a,size,*idx1);
}

Если нечетных нет вовсе — оба индекса будут равны -1, если только одно - то отрицательным будет только один индекс.

→ Ссылка
Автор решения: Nowhere Man

Вариант с одним проходом по массиву:

void findMin(int* arr, int size) {
    int min1 = -1, min2 = -1;
    for (int i = 0; i < size; i++) {
        if (arr[i] % 2 == 0) continue;
        if (min1 == -1 || arr[i] < arr[min1]) {
            min2 = min1;
            min1 = i;
        } else if (min2 == -1 || arr[i] < arr[min2]) {
            min2 = i;
        }
    }
    if (min1 > -1) {
        printf("Odd min1 at %d = %d\n", min1, arr[min1]);
        if (min2 > -1) {
            printf("Odd min2 at %d = %d\n", min2, arr[min2]);
        } else {
            printf("min2 not found\n");
        }
    } else {
        printf("No odd min is found\n");
    }
}
→ Ссылка