Kaikki mitä sinun tarvitsee tietää Quicksortista C ++: ssa



Tämä artikkeli antaa sinulle yksityiskohtaisen ja kattavan tietämyksen Quicksortin käyttöönotosta C ++: ssa esimerkkien avulla.

Lajittelualgoritmeja on lukuisia. Oikean sovelluksen sopivuuden löytäminen on tehtävä, joka vaatii lyhyen käsityksen tekijöistä, kuten tietyn algoritmin suorituskyvystä, ajan monimutkaisuudesta, koodin pituudesta jne. Tässä viestissä tarkastelemme kaikkia olennaisia ​​käsitteitä, joita tarvitaan Quicksortin toteuttamiseksi C ++: ssa seuraavassa järjestyksessä:

Quicksort-algoritmin ymmärtäminen

Ihan kuin Yhdistä lajittelu , Quicksort noudattaa jakamisen ja valloittamisen strategiaa. Käyttämällä jaa ja valloita -strategiaa jaamme ongelman moniin alaongelmiin ja ratkaisemme ne rekursiivisesti. Ensinnäkin ymmärrämme koko prosessin askel askeleelta ja sen jälkeen kehitämme esimerkin avulla syvällistä ymmärrystä koko prosessista.





  1. Ensin pyydämme käyttäjältä lajittelematonta taulukkoa.

  2. Kun meillä on lajittelematon matriisi, meidän on valittava pivot-arvo taulukosta. Voimme valita minkä tahansa arvon.



    kaksoisvalu int jaavalle
  3. Kun valitsemme kääntöpisteen, sen jälkeen meidän on järjestettävä matriisin muut elementit siten, että kaikki kääntöarvoa pienemmät elementit tulisi sijoittaa kääntöarvon oikealle puolelle ja kaikki elementit, jotka ovat suurempia kuin kääntö arvo on sijoitettava kääntöarvon oikealle puolelle.

  4. Suoritamme vaiheen 3, kunnes saamme lajitellun taulukon.

Tarkastellaan nyt esimerkkiä ja toteutetaan algoritmi ja katsotaan miten se toimii.



Hei [5, 4, 1, 11, 9, 6, 2, 3] tässä esimerkissä pivotia pidetään aina luettelon oikeanpuoleisena elementtinä.

Quicksort C ++: ssa

Käydään läpi jokainen vaihe ja ymmärretään logiikka, jota käytimme ongelman ratkaisemiseen.

  • Ensinnäkin valitsimme kääntökohdaksi '3' ja järjestimme kaikki alle '3' -elementit oikealle ja kaikki yli '3' -elementit oikealle.

  • Tässä vaiheessa meillä on 2 alaongelmaa. Ratkaistaan ​​ensin oikealla oleva ongelma. Valitsimme yhden pivotimme ja asetimme '2' oikealle.

  • Toisen alaongelman ratkaisemiseksi valitsemme kääntökohdaksi ”6” ja sijoitamme elementit kuten aiemmin keskustelimme.

  • Meillä on vielä 2 alaongelmaa. Ensimmäinen ratkaistaan ​​valitsemalla saranaksi 4 ja toinen valitsemalla saranaksi 9. Lopuksi meillä on lajiteltu taulukko elementit sijoitettu alleviivausindeksiin.

Huomautus- Tärkeä asia ymmärtää tässä on, että kaikki toiminnot tapahtuvat samassa taulukossa. Uusia taulukoita ei luoda.

Pseudokoodi Quicksortille C ++: ssa

QuickSort (taulukko [], start_index, end_index) {if (start_index

Quicksort-ohjelma C ++: ssa

Ymmärsimme algoritmin ja saimme syvällisen käsityksen algoritmin toiminnasta. Toteutetaan Quicksort C ++: ssa ja kirjoitetaan ohjelma taulukon lajittelemiseksi.

#include käyttämällä nimitilaa std void swap_elements (int * a, int * b) {int temp = * a * a = * b * b = temp} int-osio (int-taulukko [], int start_index, int end_index) {int pivot = taulukko [end_index] int i = (start_index - 1) kohteelle (int j = start_index j<= end_index- 1 j++) { if (array[j] <= pivot) { i++ swap_elements(&array[i], &array[j]) } } swap_elements(&array[i + 1], &array[end_index]) return (i + 1) } void quickSort(int array[], int start_index, int end_index) { if (start_index < end_index) { int partition_index = partition(array, start_index, end_index) quickSort(array, start_index, partition_index - 1) quickSort(array, partition_index + 1, end_index) } } void printArray(int array[], int number) { int i cout<<'Sorted Array: ' for (i = 0 i < number i++) cout << array[i] << ' ' cout << endl } int main() { int Hello[30] int i int NumberofElements cout<>Kustannusten määrä<<'Enter the elements one by one: ' for(i=0i>Hei [i]} quickSort (Hei, 0, NumberofElements-1) printArray (Hello, NumberofElements) -paluu 0}

Tuotos:

Ajan monimutkaisuus

Puhutaan minkä tahansa lajittelualgoritmin tärkeimmistä näkökohdista, ts. Ajan monimutkaisuudesta. Se kertoo algoritmin suorituskyvystä eri tilanteissa. Nämä arvot voivat auttaa meitä päättämään, voimmeko käyttää tätä algoritmia sovelluksessamme.

  • Paras tapaus- Päällä)
  • Keskimääräinen tapaus (nlogn)
  • Pahimmassa tapauksessa- Päällä2)

Tämän avulla olemme päässeet tämän Quicksortin C ++ -artikkeliin. Jos haluat oppia lisää, tutustu Edureka, luotettava verkko-oppimisyritys. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssit on suunniteltu kouluttamaan sekä ydin- että edistyneitä Java-konsepteja sekä erilaisia ​​Java-kehyksiä, kuten Hibernate & Spring.

Onko sinulla kysymys meille? Mainitse se tämän blogin kommenttiosassa ja otamme sinuun yhteyttä mahdollisimman pian.