Sto leggendo l'algoritmo di ordinamento rapido nel libro di Robert Sedwick Algorithms e le strutture di dati parte 1-4.miglioramento algoritmo di ordinamento rapido se più chiavi duplicate
template <class item>
static void quicksort(item [] a, int l, int r)
{
if(r <= l) return;
int i = partition(a,l,r);
quicksort(a, l, i-1);
quicksort(a, i+1, r);
}
template <class item>
int partition(item a[], int l, int r)
{
int i = l-1; j = r; item v = a[r];
for(;;) {
while(a[++i] < v);
while(v < a[--j])
if(j == l)
break;
if(i >= j)
break; // pointer crossing.
exch(a[i], a[j]);
}
exch(a[i], a[r]);
return i;
}
Il libro ha il seguente testo sopra l'algoritmo.
Quando le chiavi duplicate sono presenti nel file, il passaggio del puntatore è sottile. potremmo migliorare leggermente il processo di partizionamento da terminando le scansioni quando ho < j, e quindi usando j, piuttosto che i-1, per delimitare l'estremità destra del subfile sinistro per la prima chiamata ricorsiva . Lasciare il ciclo iterare ancora una volta in questo caso è un miglioramento , perché, quando mai i cicli di scansione terminano con j e mi riferisco allo stesso elemento, finiamo con due elementi in le loro posizioni finali: l'elemento che si è fermato entrambe le scansioni, che devono essere uguali all'elemento di partizionamento e l'elemento di partizionamento stesso. È probabile che questo cambiamento valga la pena, perché, in questo caso particolare, il programma lascia un record con una chiave uguale alla chiave di partizionamento in un [r] e che rende la prima partizione nella chiamata quick-sort (a , i + 1, r) degenera, perché la sua chiave più a destra è la più piccola.
Le mie domande sono
- Come possiamo modificare sopra programma con la descrizione di seguito? Ho difficoltà a modificarlo per capire il testo.
- Perché sopra l'algoritmo di ordinamento rapido non funziona in modo efficace se sono presenti più chiavi duplicate.
- Come sopra la modifica migliora se sono presenti più chiavi di duplicazione?
- Cosa significa autore per "la prima partizione nella chiamata quick-sort (a, i + 1, r) degenera, perché la sua chiave più a destra è la più piccola". ? Cosa significa autore degenera qui?
Grazie per il vostro tempo e aiuto.
@Clare Macrae: non è un compito. Sto leggendo da solo questo libro e ho una domanda sopra. – venkysmarty