Przesunięcie elementów tablicy w lewo i w prawo
Ostatnio zmodyfikowano 2017-11-01 16:27
YooSy |
» 2017-11-01 14:59:21 Pokaż kod. |
|
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! |
|
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? |
|
pekfos |
» 2017-11-01 16:18:35 Użyj po prostu std::stable_partition. |
|
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: 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 ); } |
|
1 « 2 » |