ordinamento. STL (parte 12)




l'ordinamento in C ++, stlE 'un gruppo speciale di algoritmi di ordinamento fa - in pratica è necessario ordinare una varietà di oggetti e su una varietà di criteri. L'analisi di algoritmi di ordinamento sono ben e studiato a fondo, Più di ogni altra sezione di Matematica Computazionale. Il problema principale di qualsiasi algoritmo di ordinamento è la sua complessità computazionale - il numero di operazioni di confronto-scambio, richiesto per l'ordinamento di una sequenza di lunghezza N, cosiddetta O( N ).

Il fatto spiacevole è che, che la complessità media di diversi algoritmi di diversa (sulla maggior parte delle sequenze di prova) e la massima complessità (nella peggiore per un metodo di sequenza di prova). Per diverse decine di algoritmi di ordinamento, offerto in programmazione di apprendimento, dimostrato, che la stragrande maggioranza di essi (intuitivo) È il peggiore in termini di media e in termini di massima complessità. Come esempio,, popolare tra gli studenti bubble sort E 'il peggiore di tutti generalmente noti.

efficace (complessità) l'intero set di metodi sono solo alcuni metodi di smistamento veloce ricorsiva. Vengono poi presentati alle implementazioni STL di algoritmi. Standard non insistono su un vincolo dura sui meccanismi nazionali per la loro attuazione, pertanto può essere possibile a seconda della libreria.

ora, avere una certa conoscenza algoritmi, funtore e lo stato generale delle cose con l'ordinamento, siamo pronti a prendere in considerazione le opzioni per l'implementazione tutto questo nel codice. Per iniziare una varietà di modi in cui sequenza di ordinamento numerico. esempio Velikon, ma non solo, e come, per illustrare il, per la successiva auto-sperimentazione:

Prima di compilare il programma, in MVS premere Alt + F7 e inserire argomenti di comando ?30 +3:l'ordinamento in C ++

Alcuni esempi disagio dovuto al fatto, che siamo nello stesso codice e combinare tutti STL fornito algoritmi di ordinamento, e una varietà di prova ordinati sequenza, per esempio:

  • Diversi casuale (?) sequenze di lunghezza 30, ordinabile tramite (3) confronto funtore, e dettagliata (+) sequenze di ingresso e di uscita del terminale:

    l'ordinamento in C ++

  • rovesciato (retromarcia, decrescente) sequenza, ordinabile (6) "Heap" utilizzando un albero binario (argomenti del comando -30 +6 ):l'ordinamento in C ++

  • lungo (1000000) sequenza, stesso, il caso precedente, condizioni di, ma solo con la conclusione della correttezza dei risultati della diagnosi (argomenti del comando -1000000 6 ):

    l'ordinamento in C ++

Le offerte STL 3 algoritmi di ordinamento di gruppo:

  • ordinare() – l'ordinamento più veloce in media ( il( N * ceppo( N ) ), ma che può "cadere" nel caso peggiore O( N * N ) (ed è un indicatore molto povero);

  • sort_heap() – l'ordinamento "nel mucchio", utilizzando un albero binario, la cui complessità sempre peggio di O( N + N * ceppo( N ) ) (peggio ordinare() in media, ma piuttosto il caso peggiore);

  • stable_sort() – "Stabile" merge sort, il che significa che la stabilità, che mantiene l'ordine relativo degli elementi uguali dopo la cernita. Talvolta è molto importante. La complessità di questo algoritmo è molto inferiore ordinare();

Utilizzare l'algoritmo, che è più coerente con i vincoli del vostro problema.

Newsletter nuove lezioni sulla programmazione:

ordinamento. STL (parte 12)
3 (60%) 2 voti

Di olio

esperienze pratiche circa lo sviluppo del software 40 anni. Maestro globale Logic società di software internazionale. IBM Developer funziona autore permanente di pubblicazioni. redattore scientifico del computer casa editrice letteratura "Simbolo-Plus", San Pietroburgo.

Lascia un Commento

L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *