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