Sortowanie 5 liczb (7 porównań)
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Sortowanie 5 liczb (7 porównań)

AutorWiadomość
Temat założony przez niniejszego użytkownika
Sortowanie 5 liczb (7 porównań)
» 2018-03-11 20:22:35
Witam mam problem z sortowaniem 5 liczb. Dla np: 12, 4, 5 ,3, 45, wypisuje mi złą kolejnosc
Wzorowałem się na stronie http://users.uj.edu.pl/~ufkapano/algorytmy/lekcja11/sort3.html
Czy dobrze zapisałem kod?

C/C++
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int L[ 5 ];
    for( int i = 0; i < 5; ++i )
    {
        cin >> L[ i ];
    }
    // KROK 1.
    if( L[ 0 ] > L[ 1 ] )
    {
        swap( L[ 0 ], L[ 1 ] );
    }
    if( L[ 3 ] > L[ 4 ] )
    {
        swap( L[ 3 ], L[ 4 ] );
    }
    // KROK 2.
    if( L[ 1 ] > L[ 4 ] )
    {
        swap( L[ 1 ], L[ 4 ] );
        swap( L[ 0 ], L[ 3 ] );
    }
    // Mamy [a, b, e, c, d]
    // KROK 3. Wstawiamy e ,które siedzi na L[2]
    if( L[ 2 ] < L[ 1 ] )
    {
        if( L[ 2 ] < L[ 0 ] )
        {
            swap( L[ 2 ], L[ 1 ] );
            swap( L[ 1 ], L[ 0 ] ); // Mamy [e, a, b, c, d]
        }
        else
             swap( L[ 1 ], L[ 2 ] ); // Mamy [a, e, b, c, d]
       
    }
    else if( L[ 2 ] > L[ 4 ] )
    {
        swap( L[ 2 ], L[ 4 ] ); // Mamy [a, b, d, c, e], c jest za d!
    }
    // KROK 4. Umieszczamy c, które jest na razie na L[3]
    if( L[ 3 ] < L[ 1 ] )
    {
        if( L[ 3 ] < L[ 0 ] )
        {
            swap( L[ 3 ], L[ 2 ] );
            swap( L[ 2 ], L[ 1 ] );
            swap( L[ 1 ], L[ 0 ] );
        }
        else
             swap( L[ 3 ], L[ 2 ] );
       
        swap( L[ 2 ], L[ 1 ] );
    }
    else if( L[ 3 ] < L[ 2 ] )
    {
        swap( L[ 2 ], L[ 3 ] );
    }
   
   
    for( int i = 0; i < 5; ++i )
    {
        cout << L[ i ] << " ";
    }
    return 0;
}
P-169939
» 2018-03-11 20:48:59
Użyj debuggera.
» Kurs C++ » Poziom XDebugowanie w Visual Studio 2017 lekcja
P-169941
Temat założony przez niniejszego użytkownika
» 2018-03-11 21:25:48
debugger nic mi nie wykazał
P-169942
» 2018-03-11 21:51:57
C/C++
// Mamy [a, b, e, c, d]
Na pewno? Dla ciągu testowego
{ 12, 4, 5, 3, 45 }
 jako
{ a, b, c, d, e }
 mamy raczej
{ b, a, c, d, e }
, czyli
{ 4, 12, 5, 3, 45 }
. Może najpierw nazwij zmienne
int a, b, c, d, e;
, a dopiero później podmień nazwy, jeśli jest taka konieczność? Lepiej najpierw używać takich nazw zmiennych, które są wygodne. Możesz również zdefiniować te pięć zmiennych jako referencje do poszczególnych elementów tablicy, a dopiero później to jakoś uogólnić na N elementów (jeśli w ogóle zajdzie taka potrzeba).

debugger nic mi nie wykazał
Co to znaczy, że debugger nic nie wykazał? Nie postawiłeś żadnych breakpointów, odpaliłeś debugger i dziwisz się, że nie znalazł błędów w programie, który się nie wysypuje?
P-169945
» 2018-03-12 05:59:46
debugger nic mi nie wykazał : ). Debugger jest od tego by wykonać program Krokowo to ty masz sprawdzić czy program wykonuje się zgodnie z twoim algorytmem. Jeśli rozumiesz idee tego co piszesz to prześledź krok po kroku debuggerem program a wyłapiesz gdzie program zachowuje się niezgodnie z oczekiwaniam. A jeśli tylko przepisujesz jakieś rozwiązania bezmyślnie to jest to bez sensu (bo ani wartości dydaktycznej ani praktycznego uzasadnienia takiego działania nie ma ). (Przy pomocy debuggera znajdziesz błąd tylko wtedy gdy wiesz co chciałeś osiągnąć i rozumiesz to co usiłowałeś napisać) W przeciwnym razie posortuj korzystając z gotowej implementacji.
C/C++
#include <iostream>
#include<algorithm>
using namespace std;
int main() {
    int tablica[] = { 1, 3, 2, 8, 0, 4 };
    sort( tablica, tablica + 5 );
    for( size_t i = 0; i < 5; i++ )
         cout << tablica[ i ] << " ";
   
}
P-169952
« 1 »
 Strona 1 z 1