Μια συγχώνευση είδος παίρνει μια λίστα που πρέπει να ταξινομηθούν και αναδρομικά χωρίζει τη λίστα μέχρι να φτάσουν τις τιμές της μονής , όπως η ενιαία αριθμούς . Το είδος ξαναενώνεται τους αριθμούς σε ταξινομημένη σειρά , για να επιστρέψει τελικά μια ταξινομημένη λίστα . Μια βασική κατηγορία διαλογής Java θα περιέχει μια λίστα για να ταξινομήσετε , και να καλέσετε έναν κύριο συγχώνευση λειτουργία ταξινόμησης ορίζει :
Συγχώνευση τάξη {
public int [ ] x ?
δημόσια στατική άκυρη κύρια ( String [ ] args ) {
x = [ 5 , 6 , 3 , 4 , 7 , 8 , 10 , 2 ] ?
Mergesort ( x , 0 , x . μήκος - 1 ) ?
} }
εικόνων Merge Sort λειτουργία
Η
Έξω από την κύρια κατηγορία , θα κατοικούν λειτουργία συγχώνευσης ταξινόμησης . Αυτή η λειτουργία τμημάτων σε μια περιοχή αριθμών για να ταξινομήσετε τη λίστα . Αρχικά , αυτή η περιοχή θα αποτελέσει ολόκληρη τη λίστα , αλλά όπως το είδος συγχώνευσης συνεχίζεται , θα πάρει μόνο το μισό της λίστας μέχρι να φτάσει ενιαία καταχωρήσεις . Στη συνέχεια , η λειτουργία συγχώνευσης είδος θα ανασυνδυάζεται τα στοιχεία σε μεγάλες λίστες που έχουν ταξινομηθεί ( Πηγή 2 ) :
public void Mergesort ( int χαμηλή , int hi ) {
αν ( χαμηλή < hi ) { int = μέση ( χαμηλή hi + ) /2 ? Mergesort ( χαμηλή , μέση ) ? Mergesort ( μέση + 1 , hi ) ? συγχώνευση ( χαμηλή , μέση , υψηλή ) ? } }
εικόνων < br > Βασική λειτουργία συγχώνευση
Η
Η λειτουργία συγχώνευσης θα συνδυάσει δύο λίστες μετά τη διαλογή τους . Εάν η λειτουργία δέχεται απλά στοιχεία , θα τα παραγγείλετε . Διαφορετικά , θα χρειαστούν δύο χωριστούς καταλόγους , και ανάλογα με την επιθυμία της τάξης προγραμματιστή τους σε αύξουσα ή φθίνουσα σειρά :
συγχώνευσης private void ( int χαμηλά , μέσα int , int hi ) {
< p > int [ ] copy = new int [ x.length - 1 ] ?
//Αντιγραφή δύο μέρη στη συστοιχία βοηθός για ( int i = χαμηλή ? i < = hi ? i + + ) { αντίγραφο [ i ] = x [ i ] ? }
int i = χαμηλή? int j = 1 + μέσα ? int k = χαμηλή? while ( i < = mid && j < = hi ) {if ( αντίγραφο [ i ] < = αντιγράψετε [ j ] ) { x [ k ] = αντιγράψετε [ i ] ? i + + ? } else { x [ k ] = αντιγράψετε [ ι ] ? j + + ? } k + + ? } //αντιγράψτε το υπόλοιπο από την αριστερή πλευρά του πίνακα σε πίνακα , ενώ στόχος ( i < = mid) { x [ k ] = αντιγράψετε [ i ] ? k + + ? i + + ? } }
Η < br > Merge Sort Recurse
Η
Η λειτουργία " Mergesort " χωρίζει αναδρομικά τη λίστα . Πρώτον, χωρίζει την αρχική λίστα στο μισό για κάθε φορά που καλεί τον εαυτό της αναδρομικά . Όταν η αναδρομή φθάνει σε ένα μονοψήφιο αριθμό , η λειτουργία στη συνέχεια υπαναχωρεί και αρχίζει να διατάξει τη λίστα . Κάθε φορά που η λειτουργία υπαναχωρεί σε μια προηγούμενη κλήση της συνάρτησης , συγχωνεύει δύο μισά του ένα μικρότερο κατάλογο , τελικά εργάζονται πίσω στον πλήρη κατάλογο . Η " συγχώνευση" λειτουργία φαίνεται να κάνει τη βαριά ανύψωση με την προετοιμασία και την αντιγραφή τιμές στη λίστα , αλλά η καρδιά του ένα είδος συγχώνευσης είναι το απατηλά απλό λειτουργία " Mergesort " .
Εικόνων < br >
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα