Sortowanie bąbelkowe i błąd po wpisaniu 10 jako dlugosc tablicy dynamicznej.

0

Hej!
Dlaczego po wpisaniu 10 jako dlugosc tablicy wyskakuje błąd i program się wysypuje? Myślę, że może mieć to związek z ostatnim elementem tablicy i porównaniem go z innym, ktory jest poza tablicą.

#include <iostream>
using namespace std;

void bubble(int *wsk, int dl)
{
     int temp;
     for(int i=0; i<dl; i++)
     {
             for(int j=0; j<dl; j++)
             {
                     if(*(wsk+j)>*(wsk+j+1))
                     {
                                           temp = *(wsk+j);
                                           *(wsk+j) = *(wsk+j+1);
                                           *(wsk+j+1) = temp;
                     }
             }
     }  
}

void wypisz(int *wsk, int dl)
{
     for(int i=0; i<dl; i++)
     {
             cout << *(wsk+i) << " ";
     }
}
int main()
{
    int dl;
    cin >> dl;
    int *wsk = new int[dl];
    for(int i=0; i<dl; i++)
    {
            *(wsk+i) = rand()%10;
    }
    for(int i=0; i<dl; i++)
    {
            cout << *(wsk+i) << " ";
    }
    cout << endl;
    bubble(wsk,dl);
    wypisz(wsk,dl);
    delete[] wsk;
    system("pause");
    return 0;   
}

1

Jeden błąd masz na pewno tutaj:

if(*(wsk+j)>*(wsk+j+1))

Pytanie naprowadzające #1:

  • jeśli j może być równe dl - 1 to co będzie w tym warunku porównywane dla tej wartości?

Pytanie nr 2:

  • po wykonaniu pierwszego przebiegu pętli j masz na końcu pewną specyficzną wartość, jaką? (ten błąd akurat powtarzają też w materiałach szkoleniowych, więc się nie stresuj)
  • jeśli wiesz jaką, to pytanie dlaczego pętla j wygląda tak jak wygląda?

Obie rzeczy masz wyjaśnione tutaj:

1

Hm..., tylko troszkę kosmetycznie zmieniony Twój kod funkcji i działa - tak to jest algorytm buble sort:

void bubble(int *wsk, int dl)
{	 bool zm = true;
     int temp;
     while (zm)
     {
             zm = false;
             for (int j = 0; j < dl - 1; j++)
                  if(*(wsk+j)>*(wsk+j+1))
                     {
                                           temp = *(wsk+j);
                                           *(wsk+j) = *(wsk+j+1);
                                           *(wsk+j+1) = temp;
                                           zm = true;
                     }
             
     }  
}

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