Laborfeladatok
1. Töltsünk fel egy n elemű tömböt véletlen elemekkel (ehhez a rand() % 100; utasítást használjuk), majd írassuk ki rendezetlen állapotban.
Utána rendezzük növekvő sorrendbe, s írassuk ki a rendezett tömböt.
A tömb rendezését az alábbi dupla forral oldhatjuk meg:
for (i=0; i< n-1; i++)
{
for (j=i+1; j< n; j++)
{
//ha a tomb elso feleben valamelyik elem nagyobb, mint a tomb masodik feleben, csereld ki oket
if ( v[i]> v[j])
{
aux= v[j];
v[j]= v[i];
v[i]=aux;
}
}
}
Ha valaki megoldja a cserét segéváltozó és beépített függvény használata nélkül (pl swap) az kap egy 10 es t a naplóba.
2 Feladat:
Írjunk egy C++ programot, amely csökkenő sorrendbe rendezi az előbbi tömböt!
Házi Feladat:
1. Hasonlítsuk össze az előbbi algoritmus hatékonyságát a buborékos rendezés hatékonyságával. A buborékos rendezéshez lásd a megoldott feladatot.
Az összehasonlítást N=10,100,1000,10000 es tömbökre végezzük, két oszlopban feltüntetve a két rendezéshez szükséges időt.
Házi Feladat beküldési határideje:
2020 február 4, 23:59, az ezután küldött házik 4 esek lesznek.
A házi feladattal mindenki küldje el az összehasonlítást H02_Pelda_Bela.txt vagy H02_Pelda_Bela.xls néven (attól függően, hogy Excelben,
vagy egyszerű szövegfileban készítette) illetve a két rendezést, H02_1_Pelda_Bela.cpp a normált, s H02_2_Pelda_Bela.cpp néven a buborékost.
(Példa Béla helyett természetesen az aktuális vezeték és keresztnévvel)
Ne legyenek az elnevezésben ékezetek, üres helyek, vagy egyéb írásjelek, stb.!
Megoldott feladat:
Buborékos rendezés
//szukseges konyvtarak deklaralasa
#include <iostream>
using namespace std;
//fofuggveny
int main()
{
//szukseges valtozok deklaralasa
int i, j, v[100], aux, n;
//kiirja, hogy n=
cout << "n=";
//beolvassa az n erteket
cin >> n;
//vegigmegyunk a tombon s egyenkent beolvassuk az ertekeket
for(i=0; i<n; i++){
//kiirja, hogy v[i]=
cout << "v["<<i<<"]=";
//beolvassa a v[i] erteket
cin >> v[i];
}
//buborekos rendezes algoritmus
bool csere;
int rendezettekSzama = 1;
do
{
//kezdetben nincs csere
csere = false;
//elmegyunk a tomb meg nem rendezett utolso elotti elemeig
for (i = 0; i < n-rendezettekSzama; i++)
//ha a tomb i+1 edik eleme nagyobb az i ediknel, csereljuk oket
{
if (v[i] > v[i+1])
{
aux = v[i+1];
v[i+1] = v[i];
v[i] = aux;
//volt csere, tehat a csere valtozo igaz lesz
csere = true;
}
}
//a rendezettek szamat noveljuk, mert meg egy elem a helyere kerult a tomb jobb feleben
rendezettekSzama++;
}
while(csere);
//kiiras
for (i=0; i < n; i++)
{
//kiirja a v[i] t
cout << v[i] << " ";
}
return 0;
}