abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 18:11 | IT novinky

    Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).

    Ladislav Hagara | Komentářů: 0
    včera 15:22 | Komunita

    V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).

    Ladislav Hagara | Komentářů: 0
    včera 15:00 | Nová verze

    Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 2
    včera 12:22 | Pozvánky

    Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.

    jose17 | Komentářů: 0
    včera 04:44 | IT novinky

    Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevily v únicích dat a případně se nechat na další úniky upozorňovat.

    Ladislav Hagara | Komentářů: 15
    19.5. 23:22 | Zajímavý software

    Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 7
    19.5. 22:22 | Zajímavý software

    V Seattlu a také online probíhá konference Microsoft Build 2025. Microsoft představuje své novinky. Windows Subsystem for Linux je nově open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 0
    19.5. 13:11 | Zajímavý článek

    Z příspěvku Turris Sentinel – co přinesl rok 2024 na blogu CZ.NIC: "Za poslední rok (únor 2024 – únor 2025) jsme zachytili 8,3 miliardy incidentů a to z 232 zemí a z jejich závislých území. Tyto útoky přišly od 6,2 milionu útočníků (respektive unikátních adres). SMTP minipot je stále nejlákavější pastí, zhruba 79 % útoků bylo směřováno na tento minipot, 16 % útoků směřovalo na minipot Telnet, 3 % útoků směřovaly na minipot HTTP a 2 % na minipot FTP. Dále jsme zaznamenali 3,2 milionu unikátních hesel a 318 tisíc unikátních loginů, které útočníci zkoušeli."

    Ladislav Hagara | Komentářů: 1
    19.5. 12:44 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová verze 3.0.4 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    19.5. 12:33 | Nová verze

    Byla vydána nová stabilní verze 7.4 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 136. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (60%)
     (23%)
     (9%)
     (2%)
     (0%)
     (0%)
     (6%)
    Celkem 47 hlasů
     Komentářů: 5, poslední včera 20:57
    Rozcestník

    Insertion a selection sort (seznam)

    7.5.2017 14:16 | Přečteno: 1092× | Ostatní | poslední úprava: 7.5.2017 14:14

    Srovnání prvků v jednosměrném spojovém seznamu.

    Insertion sort - nový seznam nezačíná z ukazatele na strukturu, ale z adresy lokální struktury (dummy head). Pokud je prvek ze starého seznamu menší než poslední prvek z nového seznamu, je připojen před poslední prvek z nového seznamu, jinak je připojen jako poslední. Funkce vrací ukazatel na strukturu newl->next, který ukazuje na začátek nového seznamu.
    typedef struct elem {
    	char name[MAX];	
    	struct elem *next;
    } ELEM;
    
    ELEM *insertionsort(ELEM *oldl)
    {
    	struct elem head;
    	
    	ELEM *newl, *n, *t, *u;
    	
    	newl = &head; 
    	newl->next = NULL;
    	
    	if (oldl == NULL)
    		return NULL;	
    	
    	for (t = oldl; t != NULL; t = u) {
    		u = t->next;
    		for (n = newl; n->next != NULL; n = n->next)			
    			if (strcmp(n->next->name, t->name) > 0) 
    				break;
    		t->next = n->next;
    		n->next = t;
    	}
    	
    	return newl->next;
    }
    
    Selection sort - hledá se uzel, jehož ukazatel next ukazuje na největší prvek. Největší prvek je vypuštěn (prev->next = t->next) a následně připojen na začátek nového seznamu. Pokud je ve starém seznamu největší prvek na začátku, je přesunut na konec, přičemž je třeba posunout začátek. Funkce vrací adresu starého seznamu.
    typedef struct e {
    	int x;	
    	struct e *next;
    } E;
    
    E *selectionsort(E *oldl)
    {
    	E *newl, *prev, *p, *t;
    	
    	newl = NULL;	
    	
    	if (oldl == NULL)
    		return NULL;
    	
    	while (oldl->next != NULL) {
    	
    		t = p = prev = oldl;
    	
    		for (; p->next != NULL; p = p->next)			 
    			if (p->next->x > prev->next->x)				
    				prev = p;		
    		
    		if (t->x > prev->next->x) {		
    			oldl = oldl->next;	
    			prev = p;
    			p->next = t;		
    			t->next = NULL;		
    		}
    				
    		t = prev->next;
    		prev->next = t->next;
    		t->next = newl;
    		newl = t;			
    	}
    	
    	oldl->next = newl;		
    	
    	return oldl;
    }
    
    Z hlediska rychlosti jsou obě funkce vhodné maximálně pro deset tisíc prvků.

    Základ funkcí jsem převzal z knihy Algorithms in C od Roberta Sedgewicka.        

    Hodnocení: 33 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    7.5.2017 14:42 Radovan
    Rozbalit Rozbalit vše Re: Insertion a selection sort (seznam)
    typedef struct elem {
    	char name[MAX];	
    	struct elem *next1;
    	struct elem *next2;
            ... 
    } ELEM;
    
    ?
    7.5.2017 15:21 sad
    Rozbalit Rozbalit vše Re: Insertion a selection sort (seznam)
    Jestli je to narážka na jiný způsob, tak ten neznám.
    8.5.2017 02:28 Jardík
    Rozbalit Rozbalit vše Re: Insertion a selection sort (seznam)
    Když někde vidím konstantu MAX, tuším, že je to nějaká spatlanina, co má umělá omezení. Jinak pole by vyšlo určitě lépe, než linked list, hlavně kvůli cache.
    8.5.2017 04:33 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Insertion a selection sort (seznam)
    Jo struktura co má sama sebe v sobě a ještě je z ní typedef je zajímavá :-D. Předpokládám že kompilátoru to pak nevadí že je definováno struct elem a používáno ELEM. Já bych se asi na to ELEM vykašlal je to jen o ušetření 7 bajtů.

    Případné další syntaktické odchylky nejsem schopnej posoudit (aneb pokud to projde checkpatchem a lkml tak pohoda :-D).
    8.5.2017 08:49 sad
    Rozbalit Rozbalit vše Re: Insertion a selection sort (seznam)
    Jo tak v tomhle vidíte problém. A já myslel, že je to narážka na nějaký lepší způsob řazení.

    typedef používám, protože nechci pořád psát struct v hlavičkách funkcí a tenhle zápis mi přijde docela elegantní, i když tohle je asi čistější:
    struct elem {
    	char name[MAX];	
    	struct elem *next;
    };
    
    typedef struct elem ELEM;
    
    Ve velkých projektech je asi lepší typedef nepoužívat (jak radí Linus), ale já jsem si zkoušel naprogramovat jen takovou kravinku.

    Založit nové vláknoNahoru

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