Milyen rendezéseket szoktatok használni?
Attól függ, hogy mit kell rendezni.
A quick sort az általános, de adott esetben lehet az a leglassabb is, ha olyanok a bemenő adatok.
A buborék egyáltalán nem erőforrás pazarló. Már ha ilyet lehet egyáltalán mondani manapság egy sort rutinra.
#2: Felétek.. :o)
Kérdező: El ne hidd amit a 2. ír.
A "kész megoldáson" a qsort() függvényt értitek?
______________________
És ebben a kódban a compare függvény mit csinál??
#include <stdio.h> /* printf */
#include <stdlib.h> /* qsort */
int values[] = { 40, 10, 100, 90, 20, 25 };
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main ()
{
int n;
qsort (values, 6, sizeof(int), compare);
for (n=0; n<6; n++)
printf ("%d ",values[n]);
return 0;
}
Ajánlott előre ismerni, hogy milyen adattartalmat kell rendezni. Ez a feltétel szerencsére az esetek nagyobb részében megvalósul. Ha ismeretlen de igen nagy az adattömeg, akkor lehet optimalizációs vizsgálatokat végezni, mondjuk egy másfél milliós elemszámból 6-10 helyen, mondjuk 200-as mintákat venni és a tartalmukat elemezni. Ennek ismeretében lehet nekiereszteni az egésznek a megfelelő sort rutint a megírt, optimalizált, mondjuk három féléből.
Azt is jó tudni, hogy nem csak növekvő, csökkenő sorrend létezik, hanem lehet sortolni ABC rendbe, lehet adott feltételek teljesülése esetén (pl. ár, lokáció, súly, tömeg, stb.) és lehet olyan is, amikor az egész adattömegből csak egy részt szeretnénk hasznosítani, feldolgozni vagy megismerni. Pl. Vatera, teljes 2-3 ezres lista helyett csak azon cikkekre vagyunk kiváncsiak, amelyek ára 20 és 25 ezer között van.
A buborékrendezés egyébként nem, hogy nem erőforrásigényes, de kifejezetten takarékos, már ha itt erőforráson a memóriát értjük, mert általában ez szokott probléma lenni, a processzorigény az azért gyakran másodlagos. Persze ez esetben nagy adattömegekről van szó, nem néhány százas, ezres elemszámról. Ugyanakkor, egy szervernél, sok egyidejű lekérés esetén ilyenek is terhelhetik - a kivánt mérték fölött - a processzort.
#2-esnek van igaza, sehol nem találsz rendezést lekódolva, külön lib-ek vannak már vagy 20 éve minden létező variációra, az összes rendezést rég implementálták nem kezdő programozók. Maximális időpazarlás foglalkozni vele, egy magas szintű nyelv eleve tartalmaz jó pár rutint, azt kell használni és kész, vagy az adatbázisból eleve rendezetten kell lekérdezni az adatokat, ahol már szintén rég implementálták a rendezést. Semmi értelme időt elcseszni ilyesmire, hogy a végén 0.001 ezred másodperccel gyorsabb legyen a kód, ez sehol sem szempont. Programozás-történelmi okokból még tanítgatják, mint a lyukkártyát meg az ENIAC-ot, de gyakorlatban nem kell használni, felesleges.
Az viszont fontos, hogy az adott nyelv tulajdonságaival és eszközeivel a lehető legjobban tisztában legyél, nem gondolkodhatsz pl.: "C-stílusban" egy Python nyelven írt programban, vagy C++-ban ne írj úgy mintha Java-ban programoznál. A rugalmasság nagyon fontos, különben nem lehet hatékony programot írni. Ez jobban számít,mint hogy egy napig mintavételezel meg elemezgetsz egy sima sortoláshoz, nyilván a késztermék minősége nem ezen fog múlni.
A "compare" egy olyan fuggveny, ami megmondja, hogy kell elrendezni a szamokat. Ket elem kozul melyik a kisebb; melyik keruljon a masik ele.
Ha szamokat kell osszehasonlitani, akkor ez nyilvan trivialis. Az mar erdekesebb lesz, ha pl valamilyen strukturakat akarsz elrendezni, ahol kulon szabalyaid vannak, hogy mi szerint rendezze.
Itt egy progi. Ez vizuálisan bemutatja a leggyakoribb rendező algoritmusok működési módját.
Kiderül belőle az is, hogy miért nincs igaza a 7-es válaszolónak. Sok egyéb miatt sincs igaza, de nincs kedvem gépelni, meg flame-et sem akarok gerjeszteni.
Robinka ne vergődj már.
Csak habzik a szád, de érveid nincsenek.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!