http://python-reference.readthedocs.io/en/latest/docs/list/sort.html#id1
list. sort([cmp[, key[, reverse]]])
cmp - je compare funkce, typ sort funkce. Sort ma v sobe zabudovany nejaky algoritmus, ktery porovnava 2 hodnoty a sotrebuje zjistit, ktera je vetsi, mensi, rovna, podle toho vykonava cast algoritmu 1 nebo 2 nebo 3. Pouziju javascriptovy zapis, python moc nepouzivam.
function cmpNum(a,b)
{
if (a>b) {return 1;}
if (a<b) {return -1;}
return 0; // a==b
}
function cmpStr(a,b)
{
if (len(a)-len(b)) {return cmpNum(a,b);}
else return {cmpNum(len(a),len(b))}
}
// jakoze u stringu je rychlejsi porovnat delku a az pak resit porovnani treba 1000 znaku s 1000 znaky, takze, abys sortovani urychlil, pouzijes vlastni funkci
function cmpX(a,b)
{
if (a[0]>b[0]) {return 1;}
if (a[0]<b[0]) {return -1;}
return 0; // a[0]==b[0]
}
// pole, ktere pro sort ted pouzivam, je dvourozmerne (tabulka) a chces porovnavar prvni sloupec a ostatni te nezajimaji
// je mozne napsat cmp i pro porovnani vice sloupcu, neco jako sql ORDER BY. Tohle ovsem defaultni sort nemuze vedet, jake sloupce chces sortovat podle jakych pravidel
list.sort()
list.sort(cmpNum)
list.sort(cmpStr)
list.sort(cmpX)
A treba budes chtit specialitku, potrebujes aby prvnich 5 vysledku ze seznamu mest byla praha, brno, ostrava, plzen, pardubice. To ten sort take nemuze vedet, proto si napises vlastni sort funkci a nebo to po sortovani upravis.
Jestli gna chapu spravne, tak pythonove sort ma asi tu moznost nastavit prvni key (v jinych jazycich to neni), sloupec pro serazovani tabulky. Coz je sice cool, ale nevim, zda by se tam dalo napsat vic sloupcu. Jako serad podle veku, prijmeni, jmena. Kdyz ne, zas bys musel napsat vlastni cmp funkci.
Mno, a obcas je treba napsat vlastni sort, protoze treba pro bzip potrebujes serazovaci algoritmus, ktery, kdyz porovnava dve stejne hodnoty, tak je nesmi prehodit.Coz treba quick-sort ne tak uplne splnuje. Aspon nekdy jsem cetl, ze vetsinou se pro sort pouziva quicksort.