Tot ce trebuie să știți despre Quicksort în C ++



Acest articol vă va oferi o cunoaștere detaliată și cuprinzătoare despre cum să implementați Quicksort în C ++ cu exemple.

Există o mulțime de algoritmi de sortare. Găsirea potrivirii potrivite pentru aplicația dvs. este o sarcină care necesită o scurtă înțelegere a unor factori precum performanța, complexitatea timpului, lungimea codului etc. a unui anumit algoritm. În această postare, vom arunca o privire asupra tuturor conceptelor esențiale necesare pentru a implementa Quicksort în C ++ în următoarea ordine:

Înțelegerea algoritmului Quicksort

La fel ca Merge Sort , Quicksort urmează strategia de divizare și cucerire. Prin utilizarea strategiei de divizare și cucerire, împărțim problema în multe subprobleme și le rezolvăm recursiv. În primul rând, vom înțelege întregul proces pas cu pas și după aceea, cu ajutorul unui exemplu, vom dezvolta o înțelegere profundă a întregului proces.





  1. În primul rând, vom solicita matricea nesortată de la utilizator.

    c ++ cum se sortează o matrice
  2. Odată ce avem matricea nesortată, trebuie să selectăm o valoare pivot din matrice. Putem alege orice valoare.



  3. Odată ce am selectat punctul de pivotare după aceea, trebuie să aranjăm celelalte elemente ale matricei în așa fel încât toate elementele mai mici decât valoarea pivotului să fie plasate în dreapta valorii pivotului și toate elementele mai mari decât pivotul valoarea trebuie să fie plasată în dreapta valorii pivotului.

  4. Efectuăm pasul 3 până când obținem matricea sortată.

Acum, să luăm în considerare un exemplu și să implementăm algoritmul și să vedem cum funcționează.



Bună ziua [5, 4, 1, 11, 9, 6, 2, 3] pentru acest exemplu vom considera întotdeauna pivotul ca elementul din dreapta al listei.

cum se setează classpath în java în Windows 10

Quicksort în C ++

Să parcurgem fiecare pas și să înțelegem logica pe care am folosit-o pentru a rezolva problema.

  • Mai întâi, am selectat „3” ca pivot și am aranjat toate elementele mai mici decât „3” în dreapta și toate elementele mai mari decât „3” în dreapta.

  • În acest moment, avem 2 subprobleme. Să rezolvăm mai întâi subproblema din dreapta. Am selectat unul ca pivot și am plasat „2” în dreapta.

  • Pentru a rezolva a doua subproblemă, selectăm „6” ca pivot și plasăm elementele așa cum am discutat mai devreme.

  • Mai avem încă 2 subprobleme. Primul este rezolvat selectând 4 ca pivot și al doilea este rezolvat selectând 9 ca pivot. În cele din urmă, avem matricea sortată cu elementele plasate la indexul subliniat.

Notă- Punctul important de înțeles aici este că toate operațiunile au loc în aceeași matrice. Nu sunt create matrici noi.

Pseudocod pentru Quicksort în C ++

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

Programul Quicksort în C ++

Am înțeles algoritmul și am dezvoltat o înțelegere profundă a funcționării algoritmului. Să implementăm Quicksort în C ++ și să scriem un program pentru a sorta o matrice.

#includeți folosirea spațiului de nume std void swap_elements (int * a, int * b) {int temp = * a * a = * b * b = temp} partiție int (int array [], int start_index, int end_index) {int pivot = array [end_index] int i = (start_index - 1) for (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<>Costul numărului de elemente<<'Enter the elements one by one: ' for(i=0i>Hello [i]} quickSort (Hello, 0, NumberofElements-1) printArray (Hello, NumberofElements) returnează 0}

Ieșire:

modul de utilizare a clasei de scaner

Complexitatea timpului

Să vorbim despre cel mai important aspect al oricărui algoritm de sortare, adică complexitatea timpului. Ne spune despre performanța algoritmului în diferite scenarii. Aceste valori ne pot ajuta să decidem dacă putem folosi acest algoritm pentru aplicația noastră.

  • Cel mai bun caz- Pe)
  • Caz mediu- (nlogn)
  • Cel mai rău caz- Pe2)

Cu aceasta, ajungem la sfârșitul acestui articol Quicksort în C ++. Dacă doriți să aflați mai multe, consultați de Edureka, o companie de învățare online de încredere. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog și vă vom răspunde cât mai curând posibil.