Ottimizzazione paletta sort

#include <bits/stdc++.h>
using namespace std;
long long paletta_sort(int N, int V[]) 
{
    long long int conta=0;
    for (int i=0;i<(N-2);i=i+2)
    {
        if (V[i]>V[i+2])
        {
            swap(V[i],V[i+2]);
            conta=conta+1;
            i=-2;
        }
    }
    for (int i=1;i<(N-2);i=i+2)
    {
        if (V[i]>V[i+2])
        {
            swap(V[i],V[i+2]);
            conta=conta+1;
            i=-1;
        }
    } 
    bool ord=true;
    for (int i=0;i<N;i=i+2)
    {
        if (V[i]>V[i+1])
        {
            ord=false;
            return -1;
        }
    }
    if (ord)
        return conta;
}
int main() {
    int N;
    cin >> N;
    
    int V[N];
    for (int i = 0; i < N; ++i) 
        cin >> V[i];
    long long result = paletta_sort(N, V);
    cout << result << endl;
    
    return 0;
}

Questo è il mio programma per il problema “ordinamento a paletta”, non riesco a fare più di 20/100 perchè pare non sia ottimizzato, qualcuno saprebbe aiutarmi?

Ho scritto anche questa versione, in alternativa:

#include <bits/stdc++.h>
using namespace std;
long long paletta_sort(int N, int V[]) 
{
    long long int conta=0;
    for (int i=0;i<(N-2);i=i+2)
    {
        for (int j=i+2;j<N;j=j+2)
        {
            if (V[i]>V[j])
            {
                swap(V[i],V[j]);
                conta++;
            }
        }
    }
    for (int i=1;i<(N-2);i=i+2)
    {
        for (int j=i+2;j<N;j=j+2)
        {
            if (V[i]>V[j])
            {
                swap(V[i],V[j]);
                conta++;
            }
        }
    }
    bool ord=true;
    for (int i=0;i<N;i=i+2)
    {
        if (V[i]>V[i+1])
        {
            ord=false;
            return -1;
        }
    }
    if (ord)
        return conta;
}

Essa sembrerebbe essere più efficiente ma sbagliare uno degli input nel subtask 3…