Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przesunięcie elementów tablicy w lewo i w prawo

Ostatnio zmodyfikowano 2017-11-01 16:27
Autor Wiadomość
YooSy
» 2017-11-01 14:59:21
Pokaż kod.
P-166326
koot
Temat założony przez niniejszego użytkownika
» 2017-11-01 15:03:10
@YooSy Już znalazłem swój błąd. Także wszystko działa niemal idealnie. Dzięki!
P-166327
koot
Temat założony przez niniejszego użytkownika
» 2017-11-01 15:16:28
@YooSy Mam tylko jeszcze jedno pytanie.
Czy da się to zmodyfikować tak, żeby pierwotna kolejność elementów parzystych względem siebie była zachowana?
P-166328
pekfos
» 2017-11-01 16:18:35
Użyj po prostu std::stable_partition.
P-166331
Elaine
» 2017-11-01 16:27:04
Użyj po prostu std::stable_partition.
Ahem:
Nie mogę utworzyć nowej tablicy. Jednym z wymogów zadania jest to, by modyfikować tę już istniejącą.
W ogóle nie rozumiem tego kodu. Chyba yba jest za skomplikowany dla mnie. Powinienem to zrobić jakimś prostym przesunięciem, tylko nie wiem jak..

Da się to zrobić w miejscu — std::stable_partition jeśli tylko może alokuje osobną tablicę, bo tak jest szybciej — tylko algorytm nie jest do końca oczywisty, polecam prześledzić sobie wykonanie w debuggerze:
C/C++
int * stable_odd_even_partition( int * array, std::size_t length )
{
    if( length == 0 ) {
        return array;
    }
    if( length == 1 ) {
        return array +( array[ 0 ] % 2 != 0 );
    }
    const auto mid = array + length / 2;
    const auto even_start_1 = stable_odd_even_partition( array, length / 2 );
    const auto even_start_2 = stable_odd_even_partition( mid, length - length / 2 );
    return std::rotate( even_start_1, mid, even_start_2 );
}
P-166332
1 « 2 »
Poprzednia strona Strona 2 z 2