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

sortowanie bąbelkowe c++

Ostatnio zmodyfikowano 2017-03-31 14:11
Autor Wiadomość
kin.pac
Temat założony przez niniejszego użytkownika
sortowanie bąbelkowe c++
» 2017-03-31 01:07:24
Na podstawie tego:

SORTOWANIE-BĄBELKOWE-1 (n, A)
n, i, j : integer
A : array [1..100] of …
for i  1 to n – 1 do
   for j  n downto i + 1 do
      if A[j] < A[j – 1] then
         A[j] ↔ A[j – 1]

napisać program w c++. Napisałam, lecz liczby nie chcą się posortować, nie mogę znaleźć błędu.

#include<iostream>
using namespace std;
int main()
{
int n,i,j, pom;
int a[101];
cout<<"podaj n: ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"podaj kolejne a: ";
cin>>a;
};
for(j=n;j>=n-1;j--)
{
for (i=1;i<=j-1;j++)
if (a>a[i+1])
{
pom=a;
        a=a[i+1];
         a[i+1]=pom;
     }
};

cout<<"liczby posortowane"<<endl;
for(i=1;i<=n;i++)
    cout<<a<<"  ";
}
PROSZĘ O POMOC I JAK NAJSZYBSZĄ ODPOWIEDŹ!!!
P-159628
darko202
» 2017-03-31 08:08:02
C/C++
//zacznij od zapisania wprowadzanych danych do tablicy - czyli

int tab[ 101 ];
cout << "podaj n: ";
cin >> n;
for( i = 1; i <= n; i++ )
{
    cout << "podaj kolejne dane do sortowania: ";
    cin >> tab[ i ];
};

P-159631
kin.pac
Temat założony przez niniejszego użytkownika
» 2017-03-31 10:28:00
Jeżeli chodzi o wprowadzenie danych do tablicy jest ok. Nie chcą się one jedynie posortować. Wydaje mi się, że błąd może tkwić w tym momencie:
for (j = n; j >= n - 1; j--) {
        for (i = 1; i <= j - 1; j++)
lecz nie wiem co tu zmienić, żeby było wszystko w porządku.
P-159633
mateczek
» 2017-03-31 11:26:49
zasada numer 1 wklejaj kod w znaczniki
[cpp]tutaj kod[/cpp]

C/C++
for( j = n; j >= n - 1; j-- ) {
    //taka pętla wykona się zawsze 2 razy więc na pewno jest źle
}

no i jescze to !!!
C/C++
for( i = 1; i <= n; i++ )
//tablice indeksujemy od zera

przykład sortowania (można jeszcze zmodernizować i przyspieszyć)

C/C++
#include <iostream>

using namespace std;

int main()
{
    int tablica[ 5 ] { 1, 4, 3, 7, 2 };
    for( int i = 0; i < 5; i++ ) {
        for( int j = 0; j < 5 - 1; j++ ) {
            int pom = tablica[ j ];
            if( tablica[ j ] > tablica[ j + 1 ] ) {
                tablica[ j ] = tablica[ j + 1 ];
                tablica[ j + 1 ] = pom;
            }
        }
    }
    for( int i = 0; i < 5; i++ ) {
        cout << tablica[ i ] << " ";
    }
}
P-159640
kin.pac
Temat założony przez niniejszego użytkownika
» 2017-03-31 11:50:37
Tylko mam napisać program na podstawie tego:
SORTOWANIE-BĄBELKOWE-2 (n, A)
n, i, j : integer
A : array [1..100] of …
for j  n downto 2 do
for i  1 to j – 1 do
if A > A[i + 1] then
A ↔ A[i + 1]

(Przepraszam, pomyliłam się)
Więc chyba mam indekować tablicę od 1. Nurtuje mnie jeszcze ten moment z downto. To znaczy, że mam sortować tablicę z dołu do góry? Jak poprawnie zapisać ten moment?
P-159643
mateczek
» 2017-03-31 14:11:15
pewnie są języki, w których się tablice indeksuje od jedynki.

W c++ taka deklaracja tablicy jak poniżej (w sensie że deklarujesz tablicę od elementu niezerowego) nie jest możliwa.

    A : array [1..100] of int

Na stronie wikibooks https://pl.wikibooks.org/wiki​/Kody_%C5%BAr%C3%B3d%C5%82owe​/Sortowanie_b%C4%85belkowe jest wiele implementacji sortowania poniżej jedna z nich.

C/C++
#include <iostream>

using namespace std;

int main()
{
    constexpr int size = 5;
    int tab[ size ] { 1, 4, 3, 7, 2 };
    bool swapped; // Czy zamieniono w ostatnim obrocie?
   
    do {
        swapped = false;
        // pętla sortująca powtarzana, dopóki sortowanie się nie ukończy
        for( int i = 0; i < size - 1; ++i ) {
            if( tab[ i ] > tab[ i + 1 ] ) {
                swap( tab[ i ], tab[ i + 1 ] );
                swapped = true; // pętla będzie powtarzana, póki jeszcze elementy ulegają przestawieniu. gdy obieg pętli sortującej nie przestawi elementów to kończy program
            }
        }
    } while( swapped );
   
    for( int i = 0; i < size; i++ ) {
        cout << tab[ i ] << " ";
    }
}

na wzór to nie znaczy przeklepać bezmyślnie. A czy posortujesz elementy biegając od góry czy od dołu?? co to ma za znaczenie

C/C++
#include <iostream>

using namespace std;

int main()
{
    constexpr int size = 5;
    int tab[ size ] { 1, 4, 3, 7, 2 };
    bool swapped; // Czy zamieniono w ostatnim obrocie?
   
    do {
        swapped = false;
        for( int i = size - 1; i > 0; i-- ) {
            if( tab[ i ] < tab[ i - 1 ] ) {
                swap( tab[ i ], tab[ i - 1 ] );
                swapped = true;
            }
        }
    } while( swapped );
   
    for( int i = 0; i < size; i++ ) {
        cout << tab[ i ] << " ";
    }
}
P-159646
« 1 »
  Strona 1 z 1