/ / / Μέθοδοι ταξινόμησης στον προγραμματισμό: Ταξινόμηση φυσαλίδων

Μέθοδοι ταξινόμησης κατά τον προγραμματισμό: Ταξινόμηση φυσαλίδων

Το είδος της φυσαλίδας δεν θεωρείται μόνο το πιογρήγορη μέθοδος, επιπλέον, κλείνει τη λίστα με τις πιο αργές μεθόδους παραγγελίας. Ωστόσο, έχει επίσης τα πλεονεκτήματά του. Έτσι, η ταξινόμηση με τη μέθοδο 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] (το πρώτο στοιχείο είναι μεγαλύτερο από το δεύτερο), τότε:

(ανταλλάξουμε τα στοιχεία σε μέρη)?

Σιτιρόβκα = αλήθεια; (ανέφερε ότι έγινε η ανταλλαγή).

Το τέλος.

Μειονεκτήματα της μεθόδου

Το κύριο μειονέκτημα είναι η διάρκεια της διαδικασίας. Πόσο διαρκεί ο αλγόριθμος ταξινόμησης φυσαλίδων;

Ο χρόνος εκτέλεσης υπολογίζεται από το τετράγωνο του αριθμού των αριθμών στη συστοιχία - το τελικό αποτέλεσμα είναι ανάλογο με αυτό.

Στη χειρότερη περίπτωση, ο πίνακας θα διασχίζεταιόσες φορές υπάρχουν στοιχεία μείον μία τιμή. Αυτό συμβαίνει επειδή στο τέλος υπάρχει μόνο ένα στοιχείο που δεν έχει τίποτα να συγκριθεί και το τελευταίο πέρασμα μέσω του πίνακα γίνεται άχρηστη ενέργεια.

Εκτός αυτού, η μέθοδος ταξινόμησης με απλήανταλλαγές, όπως ονομάζεται επίσης, μόνο για μικρές συστοιχίες. Δεν θα είναι δυνατή η επεξεργασία μεγάλων ποσοτήτων δεδομένων με τη βοήθειά του: το αποτέλεσμα θα είναι είτε σφάλματα είτε αποτυχία προγράμματος.

pascal είδος φούσκα

Πλεονεκτήματα

Το είδος της φυσαλίδας είναι πολύ εύκολο να γίνει κατανοητό.Στα προγράμματα σπουδών των τεχνικών πανεπιστημίων, όταν μελετάτε τη σειρά των στοιχείων πίνακα, είναι το πρώτο που το περνά. Η μέθοδος εφαρμόζεται εύκολα τόσο στη γλώσσα προγραμματισμού των Δελφών (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

Παράδειγμα Bubble Sort στο Pascal

αλγόριθμος ταξινόμησης φυσαλίδων

Παράδειγμα:

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]; massiv [a]: = massiv [b]; μαζικά [b]: = k;

τέλος;

τέλος;

τέλος;

writeln ("μετά την ταξινόμηση") ·

για a: = 1 to kol_mas do writeln (massiv [a]);

τέλος.

Ένα παράδειγμα ταξινόμησης φυσαλίδων σε C (C)

Παράδειγμα:

#περιλαμβάνω

#περιλαμβάνω

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;

}