Problematyczne sortowanie.

0
int sort (int n, int tab[]){
	
	for (int i=0; i<n-1; i++){
	
        for (int j=0; j<n-1; j++)
        if (tab[j]>tab[j+1])
        swap(tab[j], tab[j+1]);
    }

return 0;
}

Chodzi o to, że używam tej funkcji do 2 rzeczy, wypisania posortowanego ciagu liczb i do wybrania najmniejszej z tego ciągu. I u mnie w konsoli wszystko jest ok, ale na stronie sprawdzajacej algorytm nie jest dobrze.

Funkcja do wypisania tablicy

void WypiszTablice ( int n){
	for(int i=0;i<n;i++){
	
	
	cout<<tab[i];
}}

A najmniejsza liczbe wyswietlam w sposob cout<<tab[0];

Czy to w funkcji sortujacej jest problem ?

0

Pomijając, że optymistyczna złożoność twojego algorytmu to n², to wygląda on ok - przynajmniej ja nie zauważyłem błędu na tym poziomie.

Ale:

  1. Dlaczego nie podasz całego kodu i zadania?
  2. Dlaczego wypisujesz liczby bez białych znaków między nimi?
  3. Dlaczego nie użyjesz std::sort?
0

Nie podałem całego kodu bo to część większego projektu na uczelnie. Funkcje typu sort są zakazane.
Zmieniłem na cout<<tab[i]<" ";
Treść tych 2 podpunktów brzmi
0) Znajdź pozycje zawierające najmniejszą wartość dla wejściowego ciągu liczb.

  1. Posortuj wejściowy ciąg liczb. Musisz zastosować funkcję z podproblemu 0).
0

"Znajdź pozycje zawierające najmniejszą wartość dla wejściowego ciągu liczb" - To zdanie nie ma sensu, gdyż najmniejsza wartość jest jedna.

0
lion137 napisał(a):

"Znajdź pozycje zawierające najmniejszą wartość dla wejściowego ciągu liczb" - To zdanie nie ma sensu, gdyż najmniejsza wartość jest jedna.

Niekoniecznie bez sensu, może chodzi tutaj o sytuację, że najmniejszą wartość wprowadzono kilka razy, np. pięć 0.

Natomiast co do sortowania autorze - robisz widzę sortowanie bąbelkowe. Traf chciał, że przy okazji pomocy innej osobie utworzyłem jego implementację parę dni temu. Łap, może okaże się pomocna:

void bubbleSort(int *table, int columns)
{
    bool wasSwap;
    do
    {
        wasSwap = false;
        for (int cnt = 1; cnt < columns; cnt++)
        {
            if (table[cnt] < table[cnt - 1])
            {
                int swap = table[cnt];
                table[cnt] = table[cnt - 1];
                table[cnt - 1] = swap;
                wasSwap = true;
            }
        }
        columns--;
    }
    while (wasSwap);
}
0

Tu nie chodzi o zrobienie sortowania bąbelkowego.
Jeżeli zrobisz podpunkt 0) to algorytm sortowania:

  • zamień pierwszy element tablicy z elementem wyliczonym w podpunkcie 0)
  • powtórz dla tablicy zaczynającej się za pierwszym elementem
0
Delor napisał(a):

Tu nie chodzi o zrobienie sortowania (...)

Hmmm...

fredek13 napisał(a):

(...)Treść tych 2 podpunktów brzmi
0) Znajdź pozycje zawierające najmniejszą wartość dla wejściowego ciągu liczb.

  1. Posortuj wejściowy ciąg liczb. Musisz zastosować funkcję z podproblemu 0).

...sprzeczność widzę Bracie @Delor.

0

Sortowanie przez wybieranie nie jest sortowaniem bąbelkowym.

0
Delor napisał(a):

Sortowanie przez wybieranie nie jest sortowaniem bąbelkowym.

To szczera prawda. Ale gdzie Ty widzisz Bracie sortowanie przez wybieranie w załączonym przez autora kodzie?

fredek13 napisał:
int sort (int n, int tab[]){

   for (int i=0; i<n-1; i++){

       for (int j=0; j<n-1; j++)
       if (tab[j]>tab[j+1])
       swap(tab[j], tab[j+1]);
   }

return 0;
}
0

Widzę je w treści zadania:

fredek13 napisał(a):

...

Treść tych 2 podpunktów brzmi
0) Znajdź pozycje zawierające najmniejszą wartość dla wejściowego ciągu liczb.

  1. Posortuj wejściowy ciąg liczb. Musisz zastosować funkcję z podproblemu 0).
0

Mhm, czyli nie wyraziłeś się precyzyjnie Bracie @Delor, i miałeś na myśli, że autor zastosował niepoprawnie algorytm bąbelkowy podczas gdy zadanie sugeruje, że powinien użyć algorytmu przez wybieranie od wartości minimalnej?
No z taką tezą jestem skłonny się zgodzić.

0

Zgadza się. Moim błędem był brak wyraźnego zaznaczenia, że wpis odnosi się do całego wątku. Nie tylko do poprzedzającej wypowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1