• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Selection Sort wyświetlanie każdego etapu sortowania

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
221 wizyt
pytanie zadane 3 maja 2020 w C i C++ przez Gaju323 Nowicjusz (120 p.)

Witam! Próbuję zmusić funkcję selection sort do wyświetlania poszczególnych etapów sortowania jednak nie mam za bardzo pojęcia ani pomysłu jak to zrobić, proszę o podpowiedzi lub pomoc. Załączam poniżej kod:

https://pastebin.com/q9YCW0RV

#include <iostream>
#include <vector>


template <typename T>
void write_vector(std::vector<T> const & V)
{
  for(int i=0; i < V.size(); i++)

    std::cout << V[i] << " " ;
    std::cout << std::endl;

}

template <typename T>
 void selection (std::vector<T> & V) {
        int const len = V.size();
        // For each V(i)...
        for (int i = 0; i < len; i++) {
            int min = i;

            // Find the minimum of V(i+1..n).
            for (int j = i + 1; j < len; j++) {
                T & t1 = V.at(min);
                T & t2 = V.at(j);

                if (V.at(min) > V.at(j))
                    min = j;
            }

            // Swap V(i) with the minimum.
            if (i != min)
                std::swap(V.at(i), V.at(min));

{
                std::cout << V[i] << " ";
}

        }
        std::cout << std::endl;
   }


int main()
{
  int input;
  std::vector<int> V;
  while (std::cin >> input)
  {
    V.push_back(input);
  }
  write_vector(V);
  selection(V);
  return 0;
}

 

komentarz 3 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
Po kszdym swap, czyli zamianie miejsc, musialbys wyswietlic caly vector. Aczkolwiek w tej funkcji widze pewien problem, ktory raczej jest mnie wazny

1 odpowiedź

0 głosów
odpowiedź 4 maja 2020 przez TOM_CPP Pasjonat (22,640 p.)

Trochę za bardzo skomplikowałeś funkcję selection. Za dużo niepotrzebnych zmiennych oraz nie za bardzo dobrane nazwy funkcji. Zobacz jak może to wyglądać w uproszczeniu,

#include <iostream>
#include <vector>

using namespace std;

template< typename T >
void print( const vector<T>& data )
{
  for( const auto& element : data )
  {
      cout << element << " ";
  }
  cout << endl;
}

template< typename T >
void sort_verbose( vector<T>& data )
{
    print(data);
    size_t min {0};
    for( size_t i {0} ; i<data.size() ; ++i )
    {
        for( size_t j {i+1} ; j<data.size() ; ++j )
        {
            if( data[min] > data[j] ) min=j;
        }
        if( i != min )
        {
            swap(data[i],data[min]);
            print(data);
        }
    }
}


int main()
{
  std::vector<int> data {5,6,10,-4,12,776,43,0,-8};

  sort_verbose(data);
  return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,233 wizyt
0 głosów
1 odpowiedź 385 wizyt
pytanie zadane 11 stycznia 2022 w C i C++ przez HUBSON2912 Obywatel (1,480 p.)
0 głosów
1 odpowiedź 316 wizyt
pytanie zadane 2 sierpnia 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

93,444 zapytań

142,436 odpowiedzi

322,695 komentarzy

62,805 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...