Idea: Wyzaczamy ameszy elemet w cągu tablcy zameamy go mescam z elemetem perwszym, astępe z pozostałego cągu wyberamy elemet ameszy ustawamy go a druge mesce tablcy zmeamy, td. Realzaca w C++ vod seleca t a[],t l, t r for t =l; <r; ++ t m=; for t =+; <=r; ++ f a[]<a[m] m=; zamaaa[],a[m]; //realzaca fuc zamaa //przestawaace dwa elemety //dowolego typu vod zamaat &A, t &B t t=a; A=B; B=t; Typ może być dowoly
Przyład: S E L E K C J A 7 porówań A E L E K C J S 6 porówań A C L E K E J S 5 porówań A C E L K E J S 4 porówaa A C E E K L J S 3 porówaa A C E E J K L S porówaa A C E E J K L S porówae
Aalza: Załóżmy, że l=0 r=-. W l perwsze przyładu mamy - porówań a[]<a[m], potem w oleych lach: -, -3,.a a ońcu tylo porówae. Zatem:... O T max P-stwo, że w ażdym z porówań zadzemy elemet ameszy est edaowe,,,,, p Stąd: 4 4 4 4, O p
Polczmy teraz pesymstyczą wrażlwość tego algorytmu. Przypommy, że Poeważ w procedurze zawsze est wyoyway te sam cąg operac, ezależe od daych weścowych, to Δ=0. Oblczmy a oec marę wrażlwośc oczewae algorytmu. 0 w procedurze zawsze est wyoyway te sam cąg operac, ezależe od daych weścowych Poadto S=O Mówmy, że algorytm sortue w mescu
Zalety: a Lczba zama w agorszym przypadu: -. b Prostota mplemetac. c Zadowalaąca szybość dla małych wartośc. d Ne wymaga dodatowe pamęc. Wady: a Ne est stably. b Ma dużą złożoość rzędu wadratowego, węc e adae sę do sortowaa długch tablc. c Jest mało wrażlwy a wstępe uporządowae. Algorytm moża uczyć stablym, zwęszaąc współczy proporcoalośc złożoośc.
Idea: W -tym rou trzeba wstawć elemet tab[] a właścwe mesce w posortowaym fragmece tab[0] tab[-], wcześe przesuwaąc wszyste elemety węsze od ego w tym fragmece w prawo o ; powstae posortoway fragmet tab[0] tab[+]. Realzaca w C++ vod IsertSortt *tab fort =; <;++ t =; // 0..- est uż posortowae t temp=tab[]; whle >0 && tab[-]>temp tab[]=tab[-]; --; tab[]=temp;
W S T A W I A N I E porówae S W T A W I A N I E <= porówaa S T W A W I A N I E <=3 porówaa A S T W W I A N I E <= 4 porówaa A S T W W I A N I E <=5 porówań A I S T W W A N I E. A A I S T W W N I E. A A I N S T W W I E. A A I N N S T W W E <=9 porówań A A E I N N S T W W GOTOWE
Aalza: W l perwsze mamy porówae, potem masymale, td., aż do masymale - porówań a ońcu. Zatem możemy polczyć pesymstyczą złożoość : max T Poeważ elemet tab[] z rówym prawdopodobeństwem może zaąć ażdą z -te pozyc w cągu tab[0]<tab[]< <tab[-], to w -tym rou mamy p =/, czyl.... sr p T Sumuąc teraz po wszystch - teracach, dostaemy:.... 3 T T sr sr
Polczmy teraz pesymstyczą wrażlwość tego algorytmu. Przypommy, że Jest to zatem res góry zboru lczb, tóre powstaą ao różce lośc operac domuących. Zatem od lczby awęsze z możlwych ależy odąć ameszą z możlwych, żeby otrzymać ta res góry. Poeważ ameszą loścą porówań w ażdym rou -terac est edo porówae, a awęsza lość wyrażą sę oblczoą właśe T max =-/ to = =-/--=Θ. Pesymstycza wrażlwość złożoośc czasowe est zatem duża możemy sę spodzewać duże zmeośc złożoośc oblczeowe.
Średa wrażlwość czyl mara wrażlwośc oczewae: w -tym rou mamy:.... 3 6...... 4... śr p T... 4...... Sumuąc po wszystch - teracach, dostaemy:
Zalety: a Stablość. b Średo algorytm est razy szybszy ż algorytm sortowaa przez selecę. c Optymaly dla cągów prawe posortowaych. d Ne wymaga dodatowe pamęc.
Udosoalea: Moża przestać porówywać elemety, apotawszy elemet, tóry est e węszy ż wstaway, bo podtablca z lewe stroy est posortowaa sortowae adaptacye. W perwsze pętl for wyzaczamy elemet ameszy umeszczamy go a początu tablcy, astępe sortuemy pozostałe elemety. Stadardowo sortue sę zamay elemetów, ale moża zrobć przeesee węszych elemetów o edą pozycę w prawo.
Ma prosty zaps. Na czym polega to sortowae? Przyład 7-elemetowe tablcy. Elemet zaceoway w poedyczym przebegu główe pętl ulatue do góry ao alżeszy. Tablca est przemataa od dołu do góry pętla aalzowae są dwa sąsaduące ze sobą elemety pętla ; eśl e są uporządowae, to astępue ch zamaa.
Implemetaca w C++ vod bubblet *tab for t =;<;++ for t =-;>=;-- f tab[]<tab[-] //swap t tmp=tab[-]; tab[-]=tab[]; tab[]=tmp; Algorytm est lasy O Aalza: Dość często zdarzaą sę puste przebege est dooywaa żada wymaa, bo elemety są posortowae. Algorytm est bardzo wrażlwy a ofguracę daych: 4,,6,8,0,39,40 wymaga ede zamay 4,6,8,0,39,40, wymaga szesścu zama
Ulepszea: przyśpeszaą, choć e zmeaą lasy. Moża zapamętać des ostate zamay wala z pustym przebegam. Moża przełączać eru przeglądaa tablcy wala z eorzystym ofguracam daych. vod ShaerSortt *tab vod bubblet *tab for t =;<;++ for t =-;>=;-- f tab[]<tab[-] //swap t tmp=tab[-]; tab[-]=tab[]; tab[]=tmp; Algorytm poprawoy sortowaa przez wstrząsae. t left=,rght=-,=-; do fort =rght; >=left; -- ftab[-]>tab[] swaptab[-],tab[]; =; left=+; for=left; <=rght; ++ ftab[-]>tab[] swaptab[-],tab[]; =; rght=-; whle left<=rght;
Idea: Jest to róweż metoda dzel rządź, poeważ dzel tablcę a dwe częśc, tóre potem sortue ezależe. Algorytm słada sę z dwóch roów: Kro : procedura rozdzelaa elemetów tablcy względem wartośc pewe omór tablcy służące za oś podzału; proces sortowaa est dooyway przez tę właśe procedurę. Kro : procedura służąca do właścwego sortowaa, tóra e rob w zasadze c oprócz wywoływaa same sebe; zapewa posładae wyów cząstowych w osewec posortowae całe tablcy.
Sedem metody est proces podzału, tóry zmea oleość elemetów w tablcy ta, że spełoe są trzy waru: elemet a[] zadue sę dla pewego a właścwe pozyc w tablcy; Żade z elemetów a[l],, a[-] e est węszy ż a[]; Żade z elemetów a[+],, a[r] e est meszy ż a[]. W ółu mamy elemet rozgraczaący, elemety mesze są a lewo, a węsze a prawo.
Oś podzału