﻿
#include <iostream>
using namespace std;

// klasa sortujaca
class selectionSort {
private:
    const int DLUGOSC_TABLICY = 10;
    int tab[10];
    int znajdzNajwiekszyElement(int i);
public:      
    void wczytajLiczby();
    void wypiszPosortowane(int k);
    void sortuj();   
};

int main()

{
    std::cout << "Selection sort\n";
    // tworzymy obiekt klasy sortujacej
    selectionSort s;
    s.wczytajLiczby();
    s.sortuj();
}

// wczytyje 10 liczb
void selectionSort::wczytajLiczby()
{
    cout << "podaj 10 liczb calkowitych" << endl;
    for (int i = 0; i < DLUGOSC_TABLICY; i++)
    {
        cin >> tab[i];
    }
}

// wypisuje poczatkowe posortowane elementy tablicy do indeksu k
void selectionSort::wypiszPosortowane(int k)
{
    cout << "posortowana: ";
    for (int i = 0; i <= k; i++)
    {
        cout << tab[i] <<" ";
    }
    cout << endl;
}


void selectionSort::sortuj()
{
    for (int i = 0; i < DLUGOSC_TABLICY; i++)
    { 
        // szukamy najwiekszy element tablicy dla indeksów od i+1 i wstawiamy go 
        // do indeksu i
        tab[i] = znajdzNajwiekszyElement(i);
        wypiszPosortowane(i);
    }
}

// szuka najwiekszego elementu tablicy począwszy od indeksu i+1
int selectionSort::znajdzNajwiekszyElement(int i)
{
    // zakładamy na początku, że tab[i] jest największym elementem
    // szukamy wiekszej liczby w pozostałej części tablicy
    for (int j = i + 1; j < DLUGOSC_TABLICY; j++)
    {
        // jeśli znajdziemy wiekszy element zamieniamy je miejscami
        if (tab[j] > tab[i]) {
            int tmp = tab[i];
            tab[i] = tab[j];
            tab[j] = tmp;
        }
        // wypisz tablicę
        for (int n = 0; n < 10; n++)
        {
            cout << tab[n] << " ";
        }
        cout << endl;
    }
    // zwracamy największy znaleziony element
    return tab[i];
}
