Το είδος της φυσαλίδας δεν θεωρείται μόνο το πιογρήγορη μέθοδος, επιπλέον, κλείνει τη λίστα με τις πιο αργές μεθόδους παραγγελίας. Ωστόσο, έχει επίσης τα πλεονεκτήματά του. Έτσι, η ταξινόμηση με τη μέθοδο bubble είναι η πιο λογική και φυσική λύση στο πρόβλημα, εάν πρέπει να τακτοποιήσετε τα στοιχεία σε μια συγκεκριμένη σειρά. Ένα συνηθισμένο άτομο, για παράδειγμα, θα το χρησιμοποιήσει χειροκίνητα - μόνο με διαίσθηση.
Το όνομα της μεθόδου εφευρέθηκε χρησιμοποιώντας μια αναλογία μεφυσαλίδες αέρα στο νερό. Αυτή είναι μια μεταφορά. Ακριβώς όπως οι μικρές φυσαλίδες αέρα ανεβαίνουν προς τα πάνω - τελικά, η πυκνότητά τους είναι μεγαλύτερη από οποιοδήποτε υγρό (σε αυτήν την περίπτωση, νερό), έτσι κάθε στοιχείο της συστοιχίας, όσο μικρότερη είναι η αξία του, τόσο περισσότερο σταδιακά φτάνει στην αρχή της λίστας αριθμών.
Η ταξινόμηση των φυσαλίδων γίνεται ως εξής:
Ακόμη πιο σύντομο, ο αλγόριθμος του μελλοντικού προγράμματος μπορεί να γραφτεί ως εξής:
Η απλούστερη εφαρμογή έχει ως εξής:
Διαδικασία Sortirovka_Puzirkom.
Η αρχή
κύκλος για Καλά από το nachalnii_index πριν konechii_index.
κύκλος για και από το nachalnii_index πριν konechii_index-1.
αν ένα μαζική [i]> μαζική [i + 1] (το πρώτο στοιχείο είναι μεγαλύτερο από το δεύτερο), τότε:
(αλλάξτε τις τιμές σε μέρη).
Το τέλος
Φυσικά, εδώ η απλότητα επιδεινώνεταικατάσταση: όσο πιο απλός είναι ο αλγόριθμος, τόσο περισσότερο εμφανίζονται όλες οι αδυναμίες σε αυτόν. Η κατανάλωση χρόνου είναι πολύ υψηλή ακόμη και για μια μικρή συστοιχία (εδώ η σχετικότητα έρχεται στο παιχνίδι: για έναν απλό, ο χρόνος μπορεί να φαίνεται μικρός, αλλά στην επιχείρηση του προγραμματιστή, μετράει κάθε δευτερόλεπτο ή ακόμα και χιλιοστά του δευτερολέπτου).
Απαιτήθηκε καλύτερη εφαρμογή. Για παράδειγμα, λαμβάνοντας υπόψη την ανταλλαγή τιμών στον πίνακα σε μέρη:
Διαδικασία Sortirovka_Puzirkom.
Η αρχή
Σιτιρόβκα = αλήθεια;
αντίο κύκλο Σιτιρόβκα = αλήθεια;
Σιτιρόβκα = ψευδές;
κύκλος για και από το nachalnii_index πριν konechii_index-1.
αν ένα μαζική [i]> μαζική [i + 1] (το πρώτο στοιχείο είναι μεγαλύτερο από το δεύτερο), τότε:
(ανταλλαγή στοιχείων σε μέρη) ·
Σιτιρόβκα = αλήθεια; (ανέφερε ότι έγινε η ανταλλαγή).
Το τέλος.
Το κύριο μειονέκτημα είναι η διάρκεια της διαδικασίας. Πόσο διαρκεί ο αλγόριθμος ταξινόμησης φυσαλίδων;
Ο χρόνος εκτέλεσης υπολογίζεται από το τετράγωνο του αριθμού των αριθμών στη συστοιχία - το τελικό αποτέλεσμα είναι ανάλογο με αυτό.
Στη χειρότερη περίπτωση, ο πίνακας θα διασχίζεταιόσες φορές υπάρχουν στοιχεία μείον μία τιμή. Αυτό συμβαίνει επειδή στο τέλος υπάρχει μόνο ένα στοιχείο που δεν έχει τίποτα να συγκριθεί και το τελευταίο πέρασμα μέσω του πίνακα γίνεται άχρηστη ενέργεια.
Εκτός αυτού, η μέθοδος ταξινόμησης με απλήανταλλαγές, όπως ονομάζεται επίσης, μόνο για μικρές συστοιχίες. Δεν θα είναι δυνατή η επεξεργασία μεγάλων ποσοτήτων δεδομένων με τη βοήθειά του: το αποτέλεσμα θα είναι είτε σφάλματα είτε δυσλειτουργία προγράμματος.
Το είδος της φυσαλίδας είναι πολύ εύκολο να γίνει κατανοητό. Στα προγράμματα σπουδών των τεχνικών πανεπιστημίων, όταν μελετάτε τη σειρά των στοιχείων του πίνακα, είναι το πρώτο που θα περάσει. Η μέθοδος είναι εύκολη στην εφαρμογή τόσο στους Δελφούς (D (Delphi)) όσο και στο C / C ++ (C / C plus plus), ένας απίστευτα απλός αλγόριθμος για τη ρύθμιση των τιμών με τη σωστή σειρά και στο Pascal. Το είδος των φυσαλίδων είναι ιδανικό για αρχάριους.
Λόγω ελλείψεων, ο αλγόριθμος δεν χρησιμοποιείται για εξωσχολικούς σκοπούς.
Αρχική προβολή του πίνακα 8 22 4 74 44 37 1 7
Βήμα 1 8 22 4 74 44 37 1 7
8 22 4 74 44 1 37 7
8 22 4 74 1 44 37 7
8 22 4 1 74 44 37 7
8 22 1 4 74 44 37 7
8 1 22 4 74 44 37 7
1 8 22 4 74 44 37 7
Βήμα 2 1 8 22 4 74 44 7 37
1 8 22 4 74 7 44 37
1 8 22 4 7 74 44 37
1 8 22 4 7 74 44 37
1 8 4 22 7 74 44 37
1 4 8 22 7 74 44 37
Βήμα 3 1 4 8 22 7 74 37 44
1 4 8 22 7 37 74 44
1 4 8 22 7 37 74 44
1 4 8 7 22 37 74 44
1 4 7 8 22 37 74 44
Βήμα 4 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Βήμα 5 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Βήμα 6 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Βήμα 7 1 4 7 8 22 37 44 74
Παράδειγμα:
const kol_mas = 10;
var massiv: πίνακας [1..kol_mas] ακέραιου αριθμού;
a, b, k: ακέραιος;
αρχίσει
writeln ("input", kol_mas, "στοιχεία πίνακα");
για a: = 1 έως kol_mas do readln (massiv [a]);
για a: = 1 έως kol_mas-1 ξεκινήστε
για b: = a + 1 έως kol_mas ξεκινούν
εάν μαζική [a]> μαζική [b] τότε ξεκινήστε
k: = μαζικό [a]; μαζικό [a]: = μαζικό [b]; μαζικά [b]: = k;
τέλος;
τέλος;
τέλος;
writeln ("μετά την ταξινόμηση") ·
για a: = 1 to kol_mas do writeln (massiv [a]);
τέλος.
Παράδειγμα:
#περιλαμβάνω
#περιλαμβάνω
int main (int argc, char * argv [])
{
int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;
Για (;;) {
ff = 0;
για (i = 7; i> 0; i -) {
εάν (massiv [i] <massiv [i-1]) {
ανταλλαγή (massiv [i], massiv [i-1]);
ff ++;
}}
}}
εάν (ff == 0) διάλειμμα;
}}
getch (); // καθυστέρηση οθόνης
επιστροφή 0;
}