abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 09:22 | Nová verze

    Po 9 týdnech vývoje od vydání Linuxu 6.8 oznámil Linus Torvalds vydání Linuxu 6.9. Přehled novinek a vylepšení na LWN.net: první a druhá polovina začleňovacího okna. Později také na Linux Kernel Newbies.

    Ladislav Hagara | Komentářů: 0
    11.5. 18:22 | Nová verze

    Byla vydána verze 0.2.0 v Rustu napsaného frameworku Pingora pro vytváření rychlých, spolehlivých a programovatelných síťových systémů. Společnost Cloudflare jej letos v únoru uvolnila pod licencí Apache 2.0.

    Ladislav Hagara | Komentářů: 0
    10.5. 19:11 | Nová verze

    Open source RDP (Remote Desktop Protocol) server xrdp (Wikipedie) byl vydán ve verzi 0.10.0. Z novinek je vypíchnuta podpora GFX (Graphic Pipeline Extension). Nová větev řeší také několik bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 14
    10.5. 04:11 | Nová verze

    Rocky Linux byl vydán v nové stabilní verzi 9.4. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    9.5. 22:22 | Bezpečnostní upozornění

    Dellu byla odcizena databáze zákazníků (jméno, adresa, seznam zakoupených produktů) [Customer Care, Bleeping Computer].

    Ladislav Hagara | Komentářů: 22
    9.5. 21:11 | Zajímavý článek

    V lednu byl otevřen editor kódů Zed od autorů editoru Atom a Tree-sitter. Tenkrát běžel pouze na macOS. Byl napevno svázán s Metalem. Situace se ale postupně mění. V aktuálním příspěvku Kdy Zed na Linuxu? na blogu Zedu vývojáři popisují aktuální stav. Blíží se alfa verze.

    Ladislav Hagara | Komentářů: 59
    9.5. 14:33 | Pozvánky

    O víkendu 11. a 12. května lze navštívit Maker Faire Prague, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    8.5. 21:55 | Nová verze

    Byl vydán Fedora Asahi Remix 40, tj. linuxová distribuce pro Apple Silicon vycházející z Fedora Linuxu 40.

    Ladislav Hagara | Komentářů: 20
    8.5. 20:22 | IT novinky

    Představena byla služba Raspberry Pi Connect usnadňující vzdálený grafický přístup k vašim Raspberry Pi z webového prohlížeče. Odkudkoli. Zdarma. Zatím v beta verzi. Detaily v dokumentaci.

    Ladislav Hagara | Komentářů: 7
    8.5. 12:55 | Nová verze

    Byla vydána verze R14.1.2 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.

    JZD | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (70%)
     (7%)
     (11%)
     (13%)
    Celkem 197 hlasů
     Komentářů: 11, poslední 10.5. 18:00
    Rozcestník

    Quicksort

    6.3.2005 13:00 | Přečteno: 3925× | Linux | poslední úprava: 8.7.2005 09:43

    Nemaje klasického informatického vzdělání byl jsem toho ve škole ušetřen. O čem mluvím? Všechny ty algoritmy pro třídění a tak. No a pak to člověk potřebuje a neví. Když už to zjistí, tak si to chce vytesat do kamene. Ehm do webu. Tak taky rozšířím zbytečně duplicitní stránky, na kterých je taková, nebo onaká implementace quicksortu. Až to zas někdy budu potřebovat a jestli bude abíčko ještě existovat, tak to třeba tady najdu.

    #include <sys/time.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #define timedif(start, stop) \
      (u_int)((stop)->tv_sec - (start)->tv_sec - ((stop)->tv_usec < (start)->tv_usec))
    
    #define utimedif(start, stop) \
      (u_int)((stop)->tv_usec - (start)->tv_usec + 1000000*((stop)->tv_usec < (start)->tv_usec))
    
    #define N       (10000000)
    #ifndef __u_char_defined
    typedef __u_int u_int;
    #endif
    u_int numbers[N];
    
    #define swap(i,j) \
      { register u_int pom=*i; *i=*j; *j=pom; }
    
    void quicksort(u_int *start, u_int *end)
    {
      u_int *i, *low=start;       /* low is place for pivot */
      for(i=start; i<end; i++)
      {
        if(*i<*end) /* end element is pivot */
        {
          swap(i, low);
          low++;
        };
      };
      swap(low, end);  /* place pivot to his place */
      if(start<low-1)
        quicksort(start, low-1);
      if(low+1<end)
        quicksort(low+1, end);
    }
    
    int main(void)
    {
      u_int rand_seed;
    #ifdef __USE_BSD
      struct timezone foo_;
      struct timezone *foo=&foo_;
    #else
      void *foo=NULL;
    #endif
      struct timeval start, stop;
    
      gettimeofday(&start, foo);
      rand_seed = start.tv_usec;
      srand(rand_seed);
    
      {     /* init numbers */
        u_int i;
        for(i=0; i<N; i++)
          numbers[i]=rand();
      }
    
      /* start measure */
      gettimeofday(&start, foo);
      quicksort(numbers, numbers+N-1);
      /* measure time */
      gettimeofday(&stop, foo);
      printf("#Sorting %d numbers consumed %d.%06dsec\n",
          N, timedif(&start, &stop), utimedif(&start, &stop));
    
      {     /* test result */
        u_int i;
        char OK=1;
        for(i=0; i<N-1 && (OK &= numbers[i]<= numbers[i+1]); i++);
        printf(OK?"All OK.\n":"Something bad.\n");
        return !OK;
      }
    }

    P.S.: Tato implementace není vhodná pro částečně setříděné pole. Patch pro částečně setříděná pole:

    @@ -20,6 +20,7 @@
     void quicksort(u_int *start, u_int *end)
     {
       u_int *i, *low=start;       /* low is place for pivot */
    +  swap(start+(end-start)/2, end);
       for(i=start; i<end; i++)
       {
         if(*i<*end) /* end element is pivot */
           

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    6.3.2005 15:52 Christof | skóre: 22 | Havířov
    Rozbalit Rozbalit vše BogoSort
    QuickSort je k ničemu, nejlepší třídící algoritmus je BogoSort :-) viz http://en.wikipedia.org/wiki/Bogosort
    6.3.2005 19:15 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: BogoSort
    Tak ten je fakt dobrej. Ten ihned implementuju do svého realtime adaptivního regulátoru.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    Vašek Lorenc avatar 7.3.2005 01:02 Vašek Lorenc | skóre: 27
    Rozbalit Rozbalit vše Re: BogoSort
    Tak, jak je tam uvedený, má jednu zásadní chybku -- když půjde všechno šejdrem, není nikde zaručeno, že to vůbec skončí.. Ale jinak je to dost kvalitka, o tom žádná :)
    ...včetně majestátného loosa
    6.3.2005 16:32 Honza "tux" Friesse | skóre: 15 | blog: Tuxův blog | Vyškov
    Rozbalit Rozbalit vše To se hodí...
    ... ještě sem hoď nějaké stromové etudy (AVL stromy,...) a nějaké vyhledávací algoritmy (třeba boyer-moora). To by opravdu mnohým pomohlo (včetně mě).
    Vašek Lorenc avatar 6.3.2005 17:05 Vašek Lorenc | skóre: 27
    Rozbalit Rozbalit vše Re: To se hodí...
    A případně trochu povídání o dynamickém programování a aproximativních algoritmech, ať si lidi trochu počtou -- evidentně je to občas potřeba a praktické příklady kolem toho se hodí..
    ...včetně majestátného loosa
    6.3.2005 23:33 Jiri Bajer | skóre: 34 | blog: Sarimuv koutek | Praha
    Rozbalit Rozbalit vše Re: To se hodí...
    Mrkni se na knihovnu Aapl, treba tam najdes uz hotove reseni... Why to reinvent the wheel? ;-)
    7.3.2005 08:48 Ladislav Thon
    Rozbalit Rozbalit vše Malá noticka terminologická...
    Je to skutečně třídění, nebo spíš řazení? :)
    7.3.2005 09:12 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Malá noticka terminologická...
    No to mě mohlo napadnout, ale nenapadlo. Tak jo, je to řazení. Spokojen?
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    7.3.2005 09:26 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Malá noticka terminologická...
    A vlastně jo. Je to třídící algoritmus, jehož výsledkem je seřazená posloupnost. Jiné řadící algoritmy možná skutečně provádějí řazení, ale tenhle ne. Tenhle třídí. Co jiného dělá tahle část?
      for(i=start; i<end; i++)
      {
        if(*i<*end) /* end element is pivot */
        {
          swap(i, low);
          low++;
        };
      };
    
    Ta část jednoznačně provádí třídění na prvky menší než *end a na prvky nemenší. To je třídění jak vyšité. Je to třídící algoritmus na řazení rpvků.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    7.3.2005 17:44 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
    Rozbalit Rozbalit vše Re: Malá noticka terminologická...
    O řadících algoritmech jsem ještě neslyšel... Ale je pravda, že železniční doprava není zrovna můj obor :)
    8.3.2005 08:30 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Malá noticka terminologická...
    Ale no tak. Vždyť má pravdu. Třídící algoritmus by musel něco třídit a třídění je rozdělování nějakého souboru dat do kategorií. Výsledkem řazení je seřazený soubor dat, což je jaksi něco úplně jiného.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    8.8.2005 08:23 net-ray
    Rozbalit Rozbalit vše Dodatek
    Vyraz start+(end-start)/2 lze napsat takto: (start+end)/2
    b42 avatar 7.6.2007 22:44 b42 | skóre: 12 | Ostrava/Brno
    Rozbalit Rozbalit vše Re: Quicksort
    (ja vim ze jsem se asi o dva roky zpozdil, ale kdyby na to nekdo nekdy nahodou narazil tak:) http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.