[c++] porządkowanie elementów tablicy zgodnie z warunkiem.

Chungu
Użytkownik
Użytkownik
Posty: 121
Rejestracja: 21 paź 2016, o 20:57
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 42 razy

[c++] porządkowanie elementów tablicy zgodnie z warunkiem.

Post autor: Chungu »

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.
M Maciejewski
Użytkownik
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.

Post autor: M Maciejewski »

Mój pomysł:

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ę.
Algorytm wymyśliłem bez sprawdzenia, więc być może trzeba coś poprawić.
legolas
Użytkownik
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.

Post autor: legolas »

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
ODPOWIEDZ