Rūšiuoti elementus sąraše yra kasdieniška užduotis, dažnai reikalaujanti daug laiko. Sąvoka rūšiavimas paprastai reiškia elementų išdėstymą sąraše didėjančia arba mažėjančia tvarka, remiantis iš anksto nurodytu užsakymo santykiu. Rūšiavimas dažnai skirtas paieškai, o tai dar viena pagrindinė jo veikla tvarkant duomenis. Įsivaizduokite, kaip sunku būtų buvę ieškoti žodžio žodyne, jei jame esantys žodžiai nebuvo sutvarkyti ar surūšiuoti. Dėl šios priežasties žodyno įrašai tvarkomi įprasta abėcėlės tvarka. Daugybė užduočių ir skaičiavimų tampa paprasčiausi paprasčiausiai rūšiuojant. Štai čia pateikiami rūšiavimo algoritmai.
Rūšiavimo algoritmas yra ne kas kita, kaip būdas suskirstyti sąrašo elementus į tam tikrą tvarką, pavyzdžiui, nuo žemiausios iki didžiausios vertės, nuo didžiausios iki žemiausios vertės, didėjančia tvarka, mažėjančia tvarka, abėcėlės tvarka ir tt Dažniausiai naudojami užsakymai. yra skaitinė ir leksikografinė tvarka. Algoritmai dažniausiai naudoja rūšiavimą kaip pagrindinę paprogramę. Visur naudojami įvairūs rūšiavimo algoritmai, kiekviename iš jų naudojamas gausus metodų rinkinys. Vienas iš tokių populiarių, tačiau vienodai galingų algoritmų yra „Divide and Conquer“ algoritmas, kuris yra algoritmas, pagrįstas daugybine šakota rekursija. „Quick Sort“ ir „Merge Sort“ yra du dažniausiai naudojami algoritmai, pagrįsti „Divide“ ir „Conquer“ algoritmais.
Greitasis rūšiavimas yra labai efektyvus, tačiau efektyvus rūšiavimo algoritmas, pagrįstas dalijimo ir užkariavimo metodu, kuris yra gana panašus į dinaminį požiūrį, kai problema yra padalinta į dvi ar daugiau sub-problemų ir tada sprendžiama rekursyviai. Jei papildomos problemos yra pakankamai mažos, tada jos yra lengvai ir lengvai sprendžiamos. Taip pat vadinamas skaidinių mainų rūšiavimu, greitojo rūšiavimo algoritmas padalijant rūšiuojamą sąrašą į tris pagrindines dalis: 1) šarnyrinis elementas (centriniai elementai), 2) elementai, mažesni už šerdesą, ir 3) elementai, didesni už šerdesą. Pats šarnyras perkeliamas tarp dviejų grupių į galutinę padėtį, o QUICK SORT pritaikomas rekursyviai.
„Merge Sort“ yra dar vienas bendrosios paskirties rūšiavimo algoritmas, pagrįstas dalijimo ir užkariavimo technika. Tai yra vienas iš gerbiamiausių ir populiariausių rūšiavimo algoritmų, skirtų efektyviai naudoti išoriniams failams saugomiems duomenims rūšiuoti. Tai siūlo O (n log n) elgesį blogiausiu atveju, kai naudojama papildoma O (n) saugykla. Tai „A“ kolekcija padalijama į dvi mažesnes kolekcijas, iš kurių kiekviena yra rūšiuojama. Paskutiniame etape šios dvi surūšiuotos kolekcijos sujungiamos į vieną n dydžio kolekciją. Tai bus surūšiuotas sąrašas. Algoritmas yra gana greitas, be to, yra stabilus rūšiavimas, todėl idealiai tinka susietiems sąrašams.
- Greitojo rūšiavimo ir „Merge Sort“ rūšiavimo algoritmai yra „padalijimo ir užkariavimo“ algoritmai, turintys tą patį pagrindinį principą - padalinti problemą į dvi ar daugiau antrinių problemų ir jas išspręsti rekursyviai. Tačiau jos skiriasi sujungimo procedūromis ir atlikimo prasme. Greitasis rūšiavimas paprastai yra geresnis ir greitesnis nei kiti rūšiavimo algoritmai, įskaitant „Merge Sort“, kai kalbama apie mažą duomenų rinkinį, o „Merge Sort“ palaiko nuoseklumą, nepriklausomai nuo duomenų rinkinių tipo. Idealiai tinka greitojo rūšiavimo masyvams, tuo tarpu „Merge Sort“ yra geriausia, kai susiejami sąrašai.
- Rūšiavimas greito rūšiavimo algoritme atliekamas rekursyviai, ir kiekvienam rekursiniam skambučiui reikalinga kamino vieta. Jungimui nereikia papildomos vietos, išskyrus vieną atminties vietą sujungimui. Kadangi tai yra rūšiavimo algoritmas vietoje, rūšiavimui nereikia papildomos vietos. Tiesą sakant, jis naudoja tą patį masyvą, padalijant ir sujungiant masyvą. Kita vertus, naudojant „Merge Sort“ yra keli duomenų pateikimo faile ar masyve būdai, todėl jam reikalingos tokios darbo sritys kaip to paties dydžio pavieniai failai ar masyvai, kuriems reikia papildomos vietos..
- Blogiausias greito rūšiavimo atvejis būna tada, kai skaidymas yra nesubalansuotas - tai priklauso nuo to, kurie elementai yra naudojami skaidymui, tokiu atveju algoritmas veikia asimptotiškai taip pat lėtai kaip ir intarpas. Blogiausias greitojo rūšiavimo efektyvumas yra O (n2) ir paliekamas kaip pratimas. Tačiau to galima išvengti pasirinkus tinkamą šerdesą. Kita vertus, blogiausias „Merge Sort“ atvejis būna tada, kai reikia atlikti kuo daugiau palyginimų. Atsižvelgiant į linijinį sujungimo efektyvumą, blogiausias sujungimo rūšiavimo efektyvumas yra O (n log2 n).
- Nors ir greitojo rūšiavimo, ir sujungimo rūšiavimo algoritmai yra pagrįsti skirstymo ir užkariavimo metodais, jie skiriasi pagal metodus, naudojamus atliekant padalijimą ir sujungimo procedūras. Greitojo rūšiavimo atveju didžiąją dalį darbo reikia suskaidyti į du pogrupius, kurie vyksta prieš rūšiuojant pogrupius. „Merge Sort“ atveju svarbiausia yra sujungti du pogrupius, kurie vyksta po to, kai rūšiuojami. „Merge Sort“ reikia laikino masyvo, kad būtų galima sujungti du dalinius masyvus, tuo tarpu greitam rūšiavimui nereikia papildomos masyvo vietos, todėl erdvė efektyvesnė nei „Marge Sort“.
Tiek greitojo rūšiavimo, tiek sujungimo rūšiavimo algoritmai yra pagrįsti skirstymo ir užkariavimo metodais. Tačiau jos skiriasi metodais, naudojamais atliekant padalijimą ir sujungimo procedūras. Jie iš esmės veikia tuo pačiu principu - padalinti problemą į dvi ar daugiau subproblemų ir tada jas išspręsti rekursyviai. Suliejimas yra efektyvesnis nei greitasis rūšiavimas blogiausiu atveju, tačiau abu šie variantai yra vienodai veiksmingi vidutiniu atveju. Tačiau greitasis rūšiavimas yra efektyvesnis erdvėje nei „Merge Sort“. Taigi greitasis rūšiavimas yra neabejotinai greitesnis ir geresnis nei „Merge Sort“, tačiau jis tampa neveiksmingas keliose situacijose, tokiose kaip palyginimai.