sortowanie bąbelkowe

0

hej,jestem poczatkujący,i mam problem. jak sortuje to zmienia mi tylko jeden element tablicy,a drugi zostawia,i nie wiem gdzie leży błąd...
oto kod```

#include<cstdlib>
#include<ctime>
#include <algorithm>
using namespace std;

int main()
{   int n;
int * tab;
    cout << "wpisz liczbe elementow"<< endl;
    cin>>n;

  tab=new int [n];
srand(time(NULL));
    for (int i=0;i<n;i++)
    {
       tab[i]=rand()%1000+1;
 if (tab[i]>tab[i-1])
       {
           swap (tab[i],tab[i-1]);

       }
    cout<<tab[i]<<endl;
    }

  delete[] tab;
    return 0;
}
0

Po pierwsze - nie zaczynaj od losowej tablicy, bo ciężko Ci będzie analizować co jest źle.

Wystartuj tak:

int main()
{   
  int tab[5] = { 4, 2, 7, 8 , 1};
  int n = 5;
  // ...

Po drugie - nie rób jednocześnie wypełniania tablicy i "sortowania".

Po trzecie - to się nie może udać z tylko jedną pętlą ;)

0

dziękuje:) będę dzisiaj próbować:)

0

Zwróć uwagę, że w pierwszym obrocie pętli warunek w if wygląda tak :if (tab[0] > tab[-1])
To się nie może udać ;)

1
Bartłomiej Golenko napisał(a):

Po trzecie - to się nie może udać z tylko jedną pętlą ;)

Challenge accepted.

#include<iostream>
#include <algorithm>

using namespace std;

int main()
{   
    // INIT
    int n;

    cout << "Podaj ilosc elementow: "<< endl;
    cin >> n;

    int* tab = new int[n];

    cout << "Wprowadz wartosci elementow: "<< endl;
    for (int i = 0; i < n; i++) {
        cin >> tab[i];
    }

    // SORT - jedna petla :]

    bool anySwap = false;

    for (int i = 1; i < n; i++)
    {
        if (tab[i] < tab[i-1])
        {
            swap (tab[i],tab[i-1]);
            anySwap = true;
        }

        // reset petli jesli doszlo do jakiegokolwiek swapa
        if (anySwap && i >= n - 1) {
            // ustawiamy i na 0, bo zaraz zostanie zwiekszone o 1 i zacznie sie nastepny przebieg sortujacy
            i = 0;
            anySwap = false;
        }
    }

    // OUT

    cout << "Wynik sortowania:" << endl;

    for (int i = 0; i < n; i++) {
        cout << tab[i] << " ";
    }

    // CLEAN

    delete[] tab;

    return 0;
}

https://ideone.com/X9aJNm

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