C++ sortowanie przez wstawianie - dlaczego nie działa?

Odpowiedz Nowy wątek
2011-10-05 20:33
0
#include <iostream>
#include <string>
#include <ctime>
#include <conio.h>

using namespace std;

void WYPISZ(int tablica[], int rozmiar)
{
    for(int i = 0; i < rozmiar; i ++)
    {
        cout << tablica[i];
        cout << endl;
    }
}

void SORT(int tablica[], int rozmiar)
{

    for(int i = (rozmiar-2); i>=0; i--)
    {
        int temp = tablica[i];
        int j = i++;
        while((temp > tablica[j]) && (j < rozmiar))
        {
            tablica[j-1] = tablica[j];
            j++;
        }
        tablica[j-1] = temp;
    }

}

void main()
{

    srand(static_cast<unsigned int>(time(NULL)));
    cout << "Podaj rozmiar tablicy: ";
    int rozmiar;
    cin >> rozmiar;

    int *tablica  = new int[rozmiar];

    for(int i = 0; i <  rozmiar; i++)
    {
        *(tablica +i) = rand() % (100) + 1;
    }

    cout << "Wypiszemy nieposortowana tablice:\n ";
    WYPISZ(tablica, rozmiar);

    SORT(tablica, rozmiar);

    cout << "Wypiszemy posortowana tablice:\n ";
    WYPISZ(tablica, rozmiar);

    delete[] tablica;
    system("pause");

}

Witam, mam pytanie. Przed olimpiadą informatyczną chciałem przypomnieć sobie mniej więcej składnię C++(ostatnio siedzę w JAVIe, więc miałem prawo trochę pozapominać). No i już przy pierwszym programie pojawił się problem. Mianowicie: jestem niemal pewien że algorytm jest dobry, a sortować jak nie chce tak nie chce. Możliwe że przeoczyłem jakąś drobnostkę, pomożecie? :D

edytowany 1x, ostatnio: Patryk1992bdg, 2011-10-05 20:34
O ile dobrze widzę to masz nieskończoną pętlę. W instrukcji int j=i++ gdy i na początku jest np. 4, to po wykonaniu j==4 i i==5. - Zjarek 2011-10-05 20:44

Pozostało 580 znaków

2011-10-05 20:47
0

#include <iostream>
#include <ctime>

using namespace std;

void WYPISZ(int tablica[], int rozmiar)
{
        for(int i = 0; i < rozmiar; i ++)
        {
                cout << endl;
                cout << tablica[i];

        }
}

void SORT(int tablica[], int rozmiar)
{

        for(int i = (rozmiar-2); i>=0; i--)
        {
                int temp = tablica[i];
                int j = i;
                while((temp > tablica[j+1]) && (j < (rozmiar-1)))
                {
                        tablica[j] = tablica[j+1];
                        j++;
                }
                tablica[j] = temp;
        }

}

void main()
{

        srand(static_cast<unsigned int>(time(NULL)));
        cout << "\nPodaj rozmiar tablicy: ";
        int rozmiar;
        cin >> rozmiar;

        int *tablica  = new int[rozmiar];

        for(int i = 0; i <  rozmiar; i++)
        {
                *(tablica +i) = rand() % (100) + 1;
        }

        cout << "\nWypiszemy nieposortowana tablice:\n ";
        WYPISZ(tablica, rozmiar);

        SORT(tablica, rozmiar);

        cout << "\nWypiszemy posortowana tablice:\n ";
        WYPISZ(tablica, rozmiar);

        delete[] tablica;
        system("pause");

}

Racja, teraz działa :D Dzięki :)
PS: w sumie to wystarczyło poprawić i++ na j = i +1; Zapomniałem, że i++ ingeruje też w zmienną i :D

edytowany 1x, ostatnio: Patryk1992bdg, 2011-10-05 20:51

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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