merge sort prende una lista da ordinare e divide ricorsivamente la lista fino a raggiungere i valori singoli , come i numeri singoli. Il tipo poi ricombina i numeri in modo ordinato , infine restituire un elenco ordinato . Una classe di ordinamento di base in Java conterrà un elenco di specie , e chiamare una funzione principale unire ordinamento definisce :
classe
Merge {
public int [ ] x ;
public static void main ( String [] args ) {
x = [ 5 , 6 , 3 , 4 , 7 , 8 , 10 , 2 ] ;
mergeSort ( x , 0 , x . lunghezza - 1) ;
}}
merge sort funzione
al di fuori della classe principale risiederà una funzione merge sort . Questi segmenti funzione una serie di numeri per ordinare nella lista. Inizialmente , questa gamma rappresenterà l'intera lista , ma come il merge sort continua , ci vorranno solo metà della lista fino a raggiungere le voci singole . Quindi , la funzione di ordinamento merge ricombinare gli elementi in elenchi di grandi dimensioni che sono ordinati (Fonte 2) :
public void mergeSort ( int basso , int hi ) {
se (basso < ciao ) { int media = ( basso + hi ) /2; mergeSort ( bassa, media ) ; mergeSort ( metà + 1 , hi ) ; merge ( bassa, media , alta );} }
di base merge funzione
La funzione di unione unirà due liste dopo di loro ordinamento . Se la funzione riceve singoli elementi , che ordinerà loro. In caso contrario , ci vorranno due liste separate , e in base al desiderio del loro in ordine crescente o decrescente per programmatore :
private void merge ( int low, mid int, int hi ) {
int [ ] copia = new int [ x.length - 1 ] ;
//Copia entrambe le parti nella matrice di supporto for (int i = basso ; i < = hi , i + + ) { copia [i ] = x [ i] ; }
int i = basso ; int j = metà + 1 ; int k = basso ; while ( i < = metà && j < = hi ) {if (copia [ i] < = copia [ j ] ) { x [ k] = copia [ i] ; i + + ; } else { x [ k] = copia [ j ] ; j + + ; } k + + ; } //Copia il resto del lato sinistro della matrice nella matrice di destinazione ( i < = centro ), mentre { x [ k] = copia [ i] ; k + + ; i + + ; }
}
Merge Sort Recurse
la funzione " mergeSort " divide ricorsivamente la lista . In primo luogo , si suddivide la lista originale a metà per ogni volta che si richiama sé stesso ricorsivamente . Quando la ricorsione raggiunge una sola cifra , la funzione quindi marcia indietro e comincia a ordinare la lista . Ogni volta che la funzione marcia indietro a una precedente chiamata di funzione , si fonde due metà di una lista più piccola , alla fine di lavoro torna alla lista completa . La funzione " Merge" sembra fare il lavoro pesante organizzando e copiando i valori nella lista , ma il cuore di un merge sort è in funzione apparentemente semplice " mergeSort " .
Programmazione © www.354353.com