Witam.
Czy może mi ktoś podpowiedzieć(ewentualnie dać fragment kodu do przeanalizowania) w jaki sposób jeżeli mam np. tablicę z wartościami: 1,2,3,4,5,6 ustawić (przy pomocy jednej pętli oraz bez użycia "tablic pomocniczych" ) tak by np. na początku były liczby parzyste a na końcu nieparzyste?
Dzięki.
[c++] porządkowanie elementów tablicy zgodnie z warunkiem.
-
- Użytkownik
- Posty: 318
- Rejestracja: 14 maja 2016, o 16:25
- Płeć: Mężczyzna
- Lokalizacja: Toruń
- Pomógł: 90 razy
[c++] porządkowanie elementów tablicy zgodnie z warunkiem.
Mój pomysł:
Algorytm wymyśliłem bez sprawdzenia, więc być może trzeba coś poprawić.
Kod: Zaznacz cały
N = długość tablicy T
i = -1
j = N
dopóki (prawda):
zwiększaj i tak długo, aż T[i] jest nieparzyste lub i=N
zmniejszaj j tak długo, aż T[j] będzie parzyste lub j=0
jeśli(i<j) wymień wartości T[i] oraz T[j]
w przeciwnym wypadku przerwij pętlę.
-
- Użytkownik
- Posty: 320
- Rejestracja: 7 cze 2016, o 02:21
- Płeć: Mężczyzna
- Lokalizacja: warszawa
- Podziękował: 146 razy
- Pomógł: 3 razy
[c++] porządkowanie elementów tablicy zgodnie z warunkiem.
Na przykład tak:
Kod: Zaznacz cały
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
int main()
{
const size_t SIZE = 10;
size_t left = 0, right = SIZE - 1;
srand(time(NULL));
vector <int> tab(SIZE);
for(size_t i = 0; i < SIZE; ++i)
{
tab[i] = rand() % 100;
cout << tab[i] << endl;
}
cout << endl << "PO ZMIANIE:" << endl << endl;
while(left < right)
{
if((tab[left] & 1) == 0)
++left;
else
{
if((tab[right] & 1) == 0)
{
swap(tab[left], tab[right]);
++left;
--right;
}
else
--right;
}
}
for(auto i : tab)
cout << i << endl;
return 0;
}
Kod: Zaznacz cały
15
43
30
55
73
4
56
19
24
5
PO ZMIANIE:
24
56
30
4
73
55
43
19
15
5