Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

sortowanie bąbelkowe

Ostatnio zmodyfikowano 2015-02-12 01:36
Autor Wiadomość
robertos18
Temat założony przez niniejszego użytkownika
sortowanie bąbelkowe
» 2015-02-11 22:04:41
C/C++
#include <iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
void losowanie_liczb( int tablica[], int ile )
{
    srand( time( NULL ) );
    for( int i = 0; i < ile; i++ )
    {
        tablica[ i ] = rand() % 10 + 1;
    }
}
void wypisz( int tablica[], int ile )
{
    for( int i = 0; i < ile; i++ )
         cout << tablica[ i ];
   
}
void sortowanie_babelkowe( int tablica[], int ile )
{
    for( int i = 1; i < ile; i++ )
    {
        for( int j = ile - 1; j >= 1; j-- )
        {
            if( tablica[ j ] < tablica[ j - 1 ] )
            {
                int bufor;
                bufor = tablica[ j - 1 ];
                tablica[ j - 1 ] = tablica[ j ];
                tablica[ j ] = bufor;
            }
        }
    }
}
int main()
{
    int dane[ 10 ];
    losowanie_liczb( dane, 10 );
    wypisz( dane, 10 );
    sortowanie_babelkowe( dane, 10 );
   
    return 0;
}
Mógłby ktoś mi w prostym języku napisać gdzie tu są błedy.
P-126381
NopeDotAvi
» 2015-02-11 22:44:46
P-126385
aksen
» 2015-02-11 22:50:31
Algorytm sortowania działa poprawnie. Masz problem z wypisywaniem wyników.


1. funkcje wypisującą dane zmieniłbym tak:

C/C++
void wypisz( int tablica[], int ile )
{
    for( int i = 0; i < ile; i++ )
         cout << "t[" << i << "]= " << tablica[ i ] << endl;
   
    cout << endl;
}


2. po sortowaniu pasowałoby wypisać wyniki

a więc dodałbym na koniec:

wypisz( dane, 10 );

P-126387
Piastlis
» 2015-02-11 23:26:46
W sortowanie_babelkowe trzeba zamienić j-1 na j+1.
P-126391
aksen
» 2015-02-11 23:33:17
W sortowanie_babelkowe trzeba zamienić j-1 na j+1.

Zamierzasz wyjść poza zakres sortowanej tablicy? ;)
P-126394
Piastlis
» 2015-02-11 23:39:15
Nie masz pojęcia o czym mówisz.Jak masz odwagę wrzuć na kompilator i przeproś.
P-126395
robertos18
Temat założony przez niniejszego użytkownika
» 2015-02-11 23:41:50
Tak wyglada ostatecznie kod:
C/C++
#include <iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
void losowanie_liczb( int tablica[], int ile )
{
    srand( time( NULL ) );
    for( int i = 0; i < ile; i++ )
    {
        tablica[ i ] = rand() % 10 + 1;
    }
}
void wypisz( int tablica[], int ile )
{
    for( int i = 0; i < ile; i++ )
         cout << "t[" << i << "]= " << tablica[ i ] << endl;
   
    cout << endl;
}
void sortowanie_babelkowe( int tablica[], int ile )
{
    for( int i = 1; i < ile; i++ )
    {
        for( int j = ile - 1; j >= 1; j-- )
        {
            if( tablica[ j ] < tablica[ j - 1 ] )
            {
                int bufor;
                bufor = tablica[ j - 1 ];
                tablica[ j - 1 ] = tablica[ j ];
                tablica[ j ] = bufor;
            }
        }
    }
}
void wypisz2( int tablica[], int ile )
{
    for( int i = 0; i < ile; i++ )
         cout << "t[" << i << "]= " << tablica[ i ] << endl;
   
    cout << endl;
}
int main()
{
    int dane[ 10 ];
    losowanie_liczb( dane, 10 );
    wypisz( dane, 10 );
    sortowanie_babelkowe( dane, 10 );
    wypisz2( dane, 10 );
   
    return 0;
}
P-126396
aksen
do Piastlis
» 2015-02-11 23:46:11
for( int j = ile - 1; j >= 1; j-- )

dla tablicy 10 elementowej ile = 10

zaczynamy pętlę od j = ile - 1 = 10 - 1 = 9

użycie  tablica[ j + 1] to tyle co tablica[10] a więc wyjście poza zakres tablicy

sam przeproś :)
P-126398
« 1 » 2 3
  Strona 1 z 3 Następna strona