Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Java

Πώς να χρησιμοποιήσετε ένα Heapsort σε Java

Ο αλγόριθμος heapsort είναι μία από τις ταχύτερα αλγορίθμων ταξινόμησης διαθέσιμα . Προγραμματιστές χρησιμοποιούν heapsort σε Java , διότι είναι μια καλή επιλογή για πολύ μεγάλες συστοιχίες που ξέρουν να είναι σε μια κατάσταση χωρίς διαλογή . Για λόγους αποτελεσματικότητας , μια πραγματική δομή δέντρου δεν χρησιμοποιείται . Αντ 'αυτού , το δέντρο σχηματίζεται στη θέση του, ακριβώς στην συστοιχία. Ο αλγόριθμος είναι ένας heapsort "στη θέση " αλγόριθμος , δεδομένου ότι δεν απαιτεί επιπλέον μνήμη για να εκτελέσει το είδος. Οδηγίες
Η 1

Συνθέστε τη μέθοδο swap. Αυτό θα ανταλλάξουν δύο στοιχεία ενός πίνακα " " δημόσια στατική άκυρη ανταλλαγής ( int [ ] a, int i , int j ) { int tmp = a [ j] ? . Το [ ι ] = a [ i ] ? A [i ] = tmp ? } " " 2

Γράψτε τον πυρήνα του αλγορίθμου , η μέθοδος siftDown . Είναι που χρησιμοποιούνται τόσο για τον σχηματισμό της δομής του σωρού και κάνουν την πραγματική είδος .
Εικόνων 3

Κοσκινίστε μεγάλες τιμές προς τη ρίζα του δέντρου και μικρές τιμές προς τα φύλλα με τη μέθοδο siftDown . Καθώς αυτή η μέθοδος ονομάζεται πολλές φορές κατά τη διάρκεια της διαδικασίας διαλογής , η μεγαλύτερη κόμβος είναι σταθερά κοσκινίζεται στον κόμβο ρίζας και μεταφέρθηκε στο τέλος του πίνακα. Κάθε κόμβος n έχει μέχρι δύο παιδιά , των οποίων οι δείκτες είναι n * 2 + 1 και n * 2 + 2 . " " δημόσια στατική άκυρη siftDown ( int [ ] a, int αρχή , τέλος int) { int root = ξεκινήσει? ενώ (ρίζα * 2 + 1 παιδί int = root * 2 + 1 ? //Αν το παιδί έχει έναν αδερφό και το αξία του παιδιού είναι μικρότερη από το αδερφάκι του, εάν ( παιδί παιδί + + ? } if ( a [ root] μετάθεσης ( α , ρίζα , παιδί) ? root = παιδί ? } else { επιστροφή ? } } } " "
Η 4

Χρησιμοποιήστε το heapify μέθοδο . Αυτή η μέθοδος καλείται στην αρχή του είδους για να δημιουργήσετε την αρχική δομή του σωρού . Αυτό γίνεται γρήγορα , δεδομένου ότι η δομή του σωρού είναι κάπως ασαφής . η μόνη απαίτηση είναι ότι κάθε κόμβος πρέπει να είναι μεγαλύτερη από ό, τι η . κόμβους παιδί " " δημόσια στατική άκυρη heapify ( int [ ] a) { για ( int start = a.length /2 - 1 ? ξεκινήσει > = 0 ? ξεκινήσει - ) siftDown ( α , ξεκινήστε , a.length - 1 ) ? . . . } ""
5

Γράψτε τη μέθοδο heapSort η μέθοδος heapifies πρώτα τον πίνακα για να προετοιμαστούν για το είδος η μέθοδος siftDown καλείται στη συνέχεια ξανά από τον κόμβο ρίζα είναι τώρα ένα μικρό αξία Αυτό κοσκινίζει μια νέα μεγάλη τιμή προς τον κόμβο ρίζας , και η όλη διαδικασία επαναλαμβάνεται μέχρις ότου το μέγεθος του σωρού είναι ένα "" δημόσια στατική άκυρη heapSort (int [] α ) { heapify ( α )? . για (τέλος int = α . μήκος - 1 ? τέλος > 1 ? τέλος - ) { ανταλλαγής ( a, τέλος , 0 ) ? siftDown ( a, 0 , τέλος - 1 ) ? } } " "
Η 6

Test . τη μέθοδο heapSort το παρακάτω παράδειγμα δείχνει ένα μικρό πρόγραμμα δοκιμών " " δημόσια στατική άκυρη κύρια ( String [ ] args ) { int [ ] a = new int [ 10] ? . for (int i = 0 ? i for (int i = 0 ? i ανταλλάξουν ( a, i , i + ( int ) ( Math.random ( ) * ( 9 - i) ) ) ? System.out.println ( "Πριν διαλογή : " ) ? for (int i = 0 ? i heapSort ( α) ? System.out.println ( "Μετά τη διαλογή ")? for (int i = 0 ? i} " "
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα