[C++] Sortowanie bąbelkowe

Majka99
Użytkownik
Użytkownik
Posty: 152
Rejestracja: 20 paź 2012, o 12:54
Płeć: Kobieta
Lokalizacja: zgierz
Podziękował: 15 razy

[C++] Sortowanie bąbelkowe

Post autor: Majka99 »

Hej,udało mi się napisać cos takiego i nie wiem co dalej,znaczy się,jak wywoac funkcje by mi wyswietlala juz posortowana tablice.Moglby mi ktos pomoc ?Z góry dziękuje.

Kod: Zaznacz cały

#include <iostream>
#include <ctime>
using namespace std;
int swap(int a,int b)
{int temp=a;
a=b;
b=temp;
return swap(a,b);
}
int  babelkowe(int tab[],int n)
{
for(int j=n-1;j>0;j--)
{

 for(int i=0;i<j;i++)
   if(tab[i]>tab[i+1])
    swap(tab[i],tab[i+1]);
}

return babelkowe();
}
int main()
{   int tab[10];
    int x;
for(int i=0;i<10;i++)
{

cin>>x;
x=tab[i];
}

    return 0;
}
Ostatnio zmieniony 21 maja 2013, o 08:51 przez Afish, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.
Adwin_
Użytkownik
Użytkownik
Posty: 26
Rejestracja: 18 maja 2013, o 11:11
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 7 razy
Pomógł: 3 razy

[C++] Sortowanie bąbelkowe

Post autor: Adwin_ »

Kod: Zaznacz cały

#include <iostream>
#include <ctime>
using namespace std;
void swap(int &a,int &b)
{int temp=a;
	a=b;
	b=temp;
	
}
void babelkowe(int tab[],int n)
{
	for(int j=n-1;j>0;j--)
	{
		
		for(int i=0;i<j;i++)
			if(tab[i]>tab[i+1])
				swap(tab[i],tab[i+1]);
	}
	
	
}
int main()
{ int tab[10];
	int x;
	for(int i=0;i<10;i++)
	{
		cout << "Podaj wyraz ["<<i+1<<"] : ";
		cin>>x;
		tab[i]=x;
	}
	babelkowe(tab, 10);
	for (int i=0; i<10; i++) {
		cout << tab[i]<<" ";
	}
	return 0;
}
Majka99
Użytkownik
Użytkownik
Posty: 152
Rejestracja: 20 paź 2012, o 12:54
Płeć: Kobieta
Lokalizacja: zgierz
Podziękował: 15 razy

[C++] Sortowanie bąbelkowe

Post autor: Majka99 »

W dalszym ciagu nie pokazuje mi na wyjsciu posrotowanej tablicy...
arcan
Użytkownik
Użytkownik
Posty: 106
Rejestracja: 17 gru 2012, o 23:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 31 razy

[C++] Sortowanie bąbelkowe

Post autor: arcan »

A mi pokazuje. Wystarczy dodać na końcu zamiast:

Kod: Zaznacz cały

 
   return 0;
}

Kod: Zaznacz cały

   getchar();
   cin.ignore();
   return 0;
}
Żeby się nie zamykało od razu.
A jak chcesz już sortować częściej to zawsze polecam używać stl i biblioteki algorithm (krótszy i szybszy bo te sortowanie ma złożoność liniowo-logarytmiczną a bąbelkowe kwadratową). Proszę przykład:

Kod: Zaznacz cały

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
	vector <int> tablica;
	int liczba;
	for(int i=0;i!=10;i++)
	{
		cout<<"Podaj liczbe numer: "<<i+1<<" "<<endl;
		cin>>liczba;
		tablica.push_back(liczba);
	}
	sort(tablica.begin(),tablica.end());
	for(int i=0;i!=10;i++)
	cout<<tablica[i]<<" ";
	cin.ignore();
	getchar();
	return 0;
}
Podobnie jak w twoim programie zaipmlementowałem wczytanie 10 liczb do tablicy... ale to tylko taka ciekawostka - może się przyda
PS. po co biblioteka ctime???
Adwin_
Użytkownik
Użytkownik
Posty: 26
Rejestracja: 18 maja 2013, o 11:11
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 7 razy
Pomógł: 3 razy

[C++] Sortowanie bąbelkowe

Post autor: Adwin_ »

Jak chcę w odwrotnej kolejności to sort i reverse. Da się jakoś szybciej (czy jest na to jedna funkcja)?
arcan
Użytkownik
Użytkownik
Posty: 106
Rejestracja: 17 gru 2012, o 23:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 31 razy

[C++] Sortowanie bąbelkowe

Post autor: arcan »

To są dwie oddzielne funkcje sort i reverse ale jak chcesz mieć szybszy program i pokazać odwróconą tablice to po prostu wystarczy zamienić:

Kod: Zaznacz cały

for(int i=0;i!=10;i++)
   cout<<tablica[i]<<" ";
na to

Kod: Zaznacz cały

for(int i=tablica.size()-1;i!=-1;i--)
   cout<<tablica[i]<<" ";
rozumiesz?
Będzie to dwa razy szybsze niż reverse tablicy i wyświetlenie bo ze złożoności (tych czynności) \(\displaystyle{ O(2n)}\) wychodzi \(\displaystyle{ O(n)}\) co jest szybsze -- 21 maja 2013, o 15:28 --Aha i jeszcze trzeba pamiętać, że ten sort(); nie działa na zwykłych tablicach tylko na kontenerach bo musisz dodać iteratory (w tym przypadku vectora) sort(a.begin();a.end()
ODPOWIEDZ