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

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

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

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

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

}

Αρέσει:
0
Δημοφιλή μηνύματα
Πνευματική Ανάπτυξη
Φαγητό
yup