Ez egy függvény ami 2 paramétert ad át minek? És hogy működik?
short myArray[5] = {10,60,80,11,4};
std::short(&myArray[0],&myArray[5]); //Ez mi?
//És mi a hiba?
int main()
{
ushort myArray[10] = {10,8,25,4,69,63,11,53,88,29};
for(ushort i = 0;i < 10;i++)
cout <<"myArray["<< i <<"]: "<< myArray[i] << endl;
cout <<"Call std::short(&myArray[0],&myArray[10] \n";
std::short(&myArray[0],&myArray[10]);
for(ushort i = 0;i < 10;i++)
cout <<"myArray["<< i <<"]: "<< myArray[i] << endl;
return EXIT_SUCCESS;
}
main.cc:130:9: error: expected unqualified-id before 'short'
main.cc:130:9: error: expected ';' before 'short'
Már működik.
De az,hogy működik hol tudom megnézni?
Itt : [link]
Elég bonyolult. Általánosan van megírva nem csak konkrét típusra működik. Ennek a konkrét függvénynek rengeteg különböző polimorf példánya van template-ekkel "fűszerezve".
Gondolom rájöttél, hogy a sort nem elírás volt, hanem tényleg sort. Az ilyenek elkerüléséhez először angolul kéne megtanulni, a sort a rendezést jelenti.
Hogy hol tudod megnézni, hogy működik?
Egyfelől látatlanban megmondom neked, hogy a quicksort nevű algoritmust implementálja, másfelől ha a konkrét kódra vagy kíváncsi, keresd meg az algorithm fejállományt valahol a C++ fordítód bugyraiban, és ott keresd meg a sort függvényt. Lehet, hogy nem konkrétan abban a fájlban lesz, hanem #include-dal behúzza valahonnan máshonnan, akkor kövesd a láncot. Az a lényeg, hogy ez egy template függvény, tehát a kódnak elérhetőnek kell lennie valahol a fordítód által biztosított könyvtárban.
Semmi rendezést nem csinál az a függvény hát nem értem ennek a működését.
Ugyanúgy rakja sorrendeb mint a buborékos módszer?
Azért nem csak 2 másik függvényt hív meg. Több függvényt hív meg melyek újabb függvényeket hívnak meg.
A buborékos rendezésnél több 100x vagy több 1000x gyorsabban lefut, az input méretétől függően.
Megnéztem és még javítva van azzal a futási idő, hogy rendezés során véletlen számokat generál ezzel gyakorlatilag véletlen döntéseket hoz és a szerint rendez tovább. Ennek játékelméletbeli számelméleti háttere van hogy miért. Nem az volt a cél hogy könnyen érthető legyen hanem hogy hatékony legyen és ne csak pl. csak int tömbre működjön vagyis általánosan típusfüggetlenül van megírva. Általános rendező algoritmust nem lehet ennél (lényegében) gyorsabbat írni. Kivéve ha valamilyen speciális tulajdonságát kihasználjuk a rendezendő elemeknek, de az nem általános rendező algoritmus.
Akik írták nekik sem kell pontosan tudni hogy hogy működik. Szét van szedve sok kis függvényre ezeket külön külön más más is megírta és nem 1 nap munkája... stb.
Ezért írtam hogy nem egyszerű. A lényeg hogy használni egyszerű.
Lényegében két függvényt hív meg, ezek végzik a tényleges rendezést:
std::__introsort_loop és std::__final_insertion_sort. Meghívja még az std::__lg-t is, ez lényegében kettes alapú logaritmust számol. Persze a fenti kettő hívhat további függvényeket, de a sort maga csak ezeket hívja (meg persze implicit hivogatja a másoló konstruktorokat meg destruktort meg mindenféle ilyesmit).
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!