Bubble Αλγόριθμος ταξινόμησης με Python χρησιμοποιώντας Παράδειγμα λίστας
⚡ Έξυπνη Σύνοψη
BubblΗ ηλεκτρονική ταξινόμηση ταξινομεί τα στοιχεία της λίστας σε αύξουσα σειρά συγκρίνοντας επανειλημμένα γειτονικές τιμές και ανταλλάσσονταςping τα όταν το αριστερό στοιχείο είναι μεγαλύτερο. Αυτή η απλή συγκριτική ταξινόμηση ταιριάζει σε μικρά ή σχεδόν ταξινομημένα σύνολα δεδομένων και διδάσκει αποτελεσματικά τη βασική λογική ταξινόμησης.
Τι είναι ένα Bubble Ταξινόμηση;
Bubble Ταξινόμηση είναι ένας αλγόριθμος ταξινόμησης που χρησιμοποιείται για την ταξινόμηση στοιχείων λίστας σε αύξουσα σειρά συγκρίνοντας δύο γειτονικές τιμές. Εάν η πρώτη τιμή είναι υψηλότερη από τη δεύτερη τιμή, η πρώτη τιμή παίρνει τη θέση της δεύτερης τιμής, ενώ η δεύτερη τιμή παίρνει τη θέση της πρώτης τιμής. Εάν η πρώτη τιμή είναι χαμηλότερη από τη δεύτερη τιμή, τότε δεν γίνεται εναλλαγή.ping Εγινε.
Αυτή η διαδικασία επαναλαμβάνεται έως ότου συγκριθούν όλες οι τιμές σε μια λίστα και αν είναι απαραίτητο. Κάθε επανάληψη συνήθως ονομάζεται πέρασμα. Ο αριθμός των περασμάτων σε μια ταξινόμηση με φυσαλίδες είναι ίσος με τον αριθμό των στοιχείων σε μια λίστα μείον ένα.
Σε αυτή τη Bubble Ταξινόμηση Python φροντιστήριο θα μάθετε το πρόβλημα που λύνει, τη βελτιστοποιημένη μορφή του, μια βήμα προς βήμα οπτική αναλυτική παρουσίαση, μια λειτουργική Python πρόγραμμα και τα χαρακτηριστικά απόδοσής του.
Εφαρμογή του Bubble Αλγόριθμος ταξινόμησης
Θα αναλύσουμε την υλοποίηση σε τρία (3) βήματα, δηλαδή το πρόβλημα, τη λύση και τον αλγόριθμο που μπορούμε να χρησιμοποιήσουμε για να γράψουμε κώδικα για οποιαδήποτε γλώσσα.
Το πρόβλημα
Μια λίστα με τα στοιχεία δίνεται με τυχαία σειρά και θα θέλαμε να τα τακτοποιήσουμε με τάξη.
Σκεφτείτε την ακόλουθη λίστα:
[21, 6, 9, 33, 3]
Η λύση
Επαναλάβετε τη λίστα συγκρίνοντας δύο γειτονικά στοιχεία και ανταλλάξτεping αυτά εάν η πρώτη τιμή είναι υψηλότερη από τη δεύτερη τιμή.
Το αποτέλεσμα θα πρέπει να είναι το εξής:
[3, 6, 9, 21, 33]
Αλγόριθμος
Ο αλγόριθμος ταξινόμησης φυσαλίδων λειτουργεί ως εξής:
Βήμα 1) Βρείτε τον συνολικό αριθμό στοιχείων. Βρείτε τον συνολικό αριθμό στοιχείων στη δεδομένη λίστα.
Βήμα 2) Προσδιορίστε τον αριθμό των εξωτερικών περασμάτων (n – 1) που πρέπει να γίνουν. Το μήκος του είναι λίστα μείον ένα.
Βήμα 3) Εκτελέστε εσωτερικές διελεύσεις (n – 1) φορές για την εξωτερική διέλευση 1. Λάβετε την τιμή του πρώτου στοιχείου και συγκρίνετέ την με τη δεύτερη τιμή. Εάν η δεύτερη τιμή είναι μικρότερη από την πρώτη τιμή, τότε ανταλλάξτε τις θέσεις.
Βήμα 4) Επαναλάβετε τα περάσματα του βήματος 3 μέχρι να φτάσετε στο εξωτερικό πέρασμα (n – 1). Λάβετε το επόμενο στοιχείο στη λίστα και, στη συνέχεια, επαναλάβετε τη διαδικασία που εκτελέστηκε στο βήμα 3 μέχρι όλες οι τιμές να τοποθετηθούν στη σωστή αύξουσα σειρά τους.
Βήμα 5) Επιστρέψτε το αποτέλεσμα όταν ολοκληρωθούν όλα τα περάσματα. Επιστρέψτε τα αποτελέσματα της ταξινομημένης λίστας.
Βήμα 6) Βελτιστοποίηση Αλγορίθμου.
Αποφύγετε τα περιττά εσωτερικά περάσματα εάν η λίστα ή οι παρακείμενες τιμές είναι ήδη ταξινομημένες. Για παράδειγμα, εάν η παρεχόμενη λίστα περιέχει ήδη στοιχεία που έχουν ταξινομηθεί με αύξουσα σειρά, τότε μπορούμε να σπάσουμε νωρίς τον βρόχο.
βελτιστοποιημένη Bubble Αλγόριθμος ταξινόμησης
Από προεπιλογή, ο αλγόριθμος για την ταξινόμηση με φυσαλίδες Python συγκρίνει όλα τα στοιχεία της λίστας ανεξάρτητα από το αν η λίστα είναι ήδη ταξινομημένη ή όχι. Εάν η δεδομένη λίστα είναι ήδη ταξινομημένη, η σύγκριση όλων των τιμών είναι χάσιμο χρόνου και πόρων.
Η βελτιστοποίηση της ταξινόμησης με φούσκα μας βοηθά να αποφύγουμε περιττές επαναλήψεις και να εξοικονομήσουμε χρόνο και πόρους.
Για παράδειγμα, εάν το πρώτο και το δεύτερο στοιχείο είναι ήδη ταξινομημένα, τότε δεν χρειάζεται να επαναλάβετε τις υπόλοιπες τιμές. Η επανάληψη τερματίζεται και η επόμενη ξεκινά μέχρι να ολοκληρωθεί η διαδικασία όπως φαίνεται παρακάτω Bubble Ταξινόμηση παραδείγματος.
Η βελτιστοποίηση γίνεται χρησιμοποιώντας τα ακόλουθα βήματα:
Βήμα 1) Δημιουργήστε μια μεταβλητή flag που παρακολουθεί εάν υπάρχει κάποια ανταλλαγήping έχει συμβεί στον εσωτερικό βρόχο.
Βήμα 2) Εάν οι τιμές έχουν αλλάξει θέσεις, συνεχίστε στην επόμενη επανάληψη.
Βήμα 3) Εάν οι τιμές δεν έχουν αλλάξει θέσεις, τερματίστε τον εσωτερικό βρόχο και συνεχίστε με τον εξωτερικό βρόχο.
Μια βελτιστοποιημένη ταξινόμηση με φυσαλίδες είναι πιο αποτελεσματική, καθώς εκτελεί μόνο τα απαραίτητα βήματα και παρακάμπτει εκείνα που δεν απαιτούνται.
Οπτική αναπαράσταση
Δεδομένης μιας λίστας πέντε στοιχείων, οι ακόλουθες εικόνες δείχνουν πώς η ταξινόμηση με φυσαλίδες επαναλαμβάνει τις τιμές κατά την ταξινόμησή τους.
Η ακόλουθη εικόνα δείχνει τη μη ταξινομημένη λίστα:
Πρώτη Επανάληψη
Βήμα 1)
Οι τιμές 21 και 6 συγκρίνονται για να ελέγξετε ποια είναι μεγαλύτερη από την άλλη.
Το 21 είναι μεγαλύτερο από το 6, επομένως το 21 καταλαμβάνει τη θέση που καταλαμβάνει το 6, ενώ το 6 καταλαμβάνει τη θέση που καταλάμβανε το 21.
Η τροποποιημένη λίστα μας μοιάζει τώρα με την παραπάνω.
Βήμα 2)
Οι τιμές 21 και 9 συγκρίνονται.
Το 21 είναι μεγαλύτερο από το 9, επομένως αλλάζουμε τις θέσεις των 21 και 9.
Η νέα λίστα είναι πλέον όπως παραπάνω.
Βήμα 3)
Οι τιμές 21 και 33 συγκρίνονται για να βρεθεί η μεγαλύτερη.
Η τιμή 33 είναι μεγαλύτερη από 21, επομένως δεν υπάρχει ανταλλαγήping λαμβάνει χώρα.
Βήμα 4)
Οι τιμές 33 και 3 συγκρίνονται για να βρεθεί η μεγαλύτερη.
Η τιμή 33 είναι μεγαλύτερη από 3, επομένως ανταλλάσσουμε τις θέσεις τους.
Η ταξινομημένη λίστα στο τέλος της πρώτης επανάληψης είναι όπως αυτή που φαίνεται παραπάνω.
Δεύτερη Επανάληψη
Η νέα λίστα μετά τη δεύτερη επανάληψη έχει ως εξής:
Τρίτη Επανάληψη
Η νέα λίστα μετά την τρίτη επανάληψη έχει ως εξής:
Τέταρτη Επανάληψη
Η νέα λίστα μετά την τέταρτη επανάληψη έχει ως εξής:
Python Παραδείγματα
Ο παρακάτω κώδικας δείχνει τον τρόπο υλοποίησης του Bubble Αλγόριθμος ταξινόμησης σε Python.
def bubbleSort(theSeq): n = len(theSeq) for i in range(n - 1): flag = 0 for j in range(n - 1): if theSeq[j] > theSeq[j + 1]: tmp = theSeq[j] theSeq[j] = theSeq[j + 1] theSeq[j + 1] = tmp flag = 1 if flag == 0: break return theSeq el = [21, 6, 9, 33, 3] result = bubbleSort(el) print(result)
Εκτέλεση του παραπάνω προγράμματος ταξινόμησης με φυσαλίδες Python παράγει τα ακόλουθα αποτελέσματα:
[3, 6, 9, 21, 33]
Code εξήγηση
Η εξήγηση για το Python BubblΟ κώδικας του προγράμματος eSort έχει ως εξής:
ΕΔΩ,
- Ορίζει μια συνάρτηση bubbleSort που δέχεται μια παράμετρο theSeq. Ο κώδικας δεν βγάζει τίποτα.
- Λαμβάνει το μήκος του πίνακα και αντιστοιχίζει την τιμή σε μια μεταβλητή n. Ο κώδικας δεν εξάγει τίποτα.
- Ξεκινά έναν βρόχο for που εκτελεί τον αλγόριθμο ταξινόμησης με φυσαλίδες (n – 1) φορές. Αυτός είναι ο εξωτερικός βρόχος. Ο κώδικας δεν εξάγει τίποτα.
- Ορίζει μια μεταβλητή flag που θα χρησιμοποιηθεί για να προσδιοριστεί εάν έχει πραγματοποιηθεί μια ανταλλαγή ή όχι. Αυτό γίνεται για σκοπούς βελτιστοποίησης. Ο κώδικας δεν εξάγει τίποτα.
- Ξεκινά τον εσωτερικό βρόχο που συγκρίνει όλες τις τιμές της λίστας από την πρώτη έως την τελευταία. Ο κώδικας δεν βγάζει τίποτα.
- Χρησιμοποιεί τη δήλωση if για να ελέγξει εάν η τιμή στην αριστερή πλευρά είναι μεγαλύτερη από αυτή στην αμέσως δεξιά πλευρά. Ο κώδικας δεν βγάζει τίποτα.
- Αντιστοιχίζει την τιμή του theSeq[j] σε μια χρονική μεταβλητή tmp εάν η συνθήκη αξιολογηθεί ως true. Ο κώδικας δεν εμφανίζει τίποτα.
- Η τιμή του theSeq[j + 1] αντιστοιχίζεται στη θέση του theSeq[j]. Ο κώδικας δεν εξάγει τίποτα.
- Η τιμή της μεταβλητής tmp έχει αντιστοιχιστεί στη θέση theSeq[j + 1]. Ο κώδικας δεν εξάγει τίποτα.
- Στη μεταβλητή flag έχει εκχωρηθεί η τιμή 1 για να υποδείξει ότι έχει πραγματοποιηθεί μια ανταλλαγή. Ο κώδικας δεν εμφανίζει τίποτα.
- Χρησιμοποιεί μια εντολή if για να ελέγξει αν η τιμή της μεταβλητής flag είναι 0. Ο κώδικας δεν εξάγει τίποτα.
- Εάν η τιμή είναι 0, τότε καλούμε την εντολή break που βγαίνει από τον εσωτερικό βρόχο.
- Επιστρέφει την τιμή του theSeq αφού έχει ταξινομηθεί. Ο κώδικας βγάζει την ταξινομημένη λίστα.
- Ορίζει μια μεταβλητή el που περιέχει μια λίστα τυχαίων αριθμών. Ο κώδικας δεν βγάζει τίποτα.
- Εκχωρεί την τιμή της συνάρτησης bubbleSort σε ένα μεταβλητό αποτέλεσμα.
- Εκτυπώνει την τιμή του αποτελέσματος της μεταβλητής.
Bubblπλεονεκτήματα ταξινόμησης
Τα ακόλουθα είναι μερικά από τα πλεονεκτήματα του αλγορίθμου ταξινόμησης φυσαλίδων:
- Είναι εύκολο να το καταλάβεις.
- Αποδίδει πολύ καλά όταν η λίστα είναι ήδη ή σχεδόν ταξινομημένη.
- Δεν απαιτεί εκτεταμένη μνήμη.
- Είναι εύκολο να γράψουμε τον κώδικα για τον αλγόριθμο.
- Οι απαιτήσεις χώρου είναι ελάχιστες σε σύγκριση με άλλους αλγόριθμους ταξινόμησης.
BubblΕ ταξινόμηση Μειονεκτήματα
Τα ακόλουθα είναι μερικά από τα μειονεκτήματα του αλγορίθμου ταξινόμησης φυσαλίδων:
- Δεν έχει καλή απόδοση κατά την ταξινόμηση μεγάλων λιστών. Απαιτεί πάρα πολύ χρόνο και πόρους.
- Χρησιμοποιείται κυρίως για ακαδημαϊκούς σκοπούς και όχι για εφαρμογές στον πραγματικό κόσμο.
- Ο αριθμός των βημάτων που απαιτούνται για την ταξινόμηση της λίστας είναι της σειράς n2.
Ανάλυση πολυπλοκότητας του Bubble Ταξινόμηση
Υπάρχουν τρεις τύποι πολυπλοκότητας:
1) Ταξινόμηση πολυπλοκότητας
Η πολυπλοκότητα ταξινόμησης χρησιμοποιείται για να εκφράσει τον χρόνο εκτέλεσης και τον χώρο που απαιτείται για την ταξινόμηση της λίστας. Η ταξινόμηση με φυσαλίδες κάνει (n – 1) επαναλήψεις για να ταξινομήσει τη λίστα όπου n είναι ο συνολικός αριθμός στοιχείων στη λίστα.
2) Χρονική πολυπλοκότητα
Η χρονική πολυπλοκότητα της ταξινόμησης με φυσαλίδες είναι O(n2).
Οι χρονικές πολυπλοκότητες μπορούν να κατηγοριοποιηθούν ως εξής:
- Χειρότερη περίπτωση – εδώ η παρεχόμενη λίστα είναι με φθίνουσα σειρά. Ο αλγόριθμος εκτελεί τον μέγιστο αριθμό εκτελέσεων που εκφράζεται ως [Big-O] O(n2).
- καλυτερα case – αυτό συμβαίνει όταν η παρεχόμενη λίστα είναι ήδη ταξινομημένη. Ο αλγόριθμος εκτελεί τον ελάχιστο αριθμό εκτελέσεων που εκφράζεται ως [Big-Omega] Ω(n).
- Μέση περίπτωση – αυτό συμβαίνει όταν η λίστα είναι σε τυχαία σειρά. Η μέση πολυπλοκότητα αναπαρίσταται ως [Big-theta] ⊝(n2).
3) Πολυπλοκότητα χώρου
Η πολυπλοκότητα χώρου μετρά την ποσότητα επιπλέον χώρου που απαιτείται για την ταξινόμηση της λίστας. Η ταξινόμηση με φυσαλίδες απαιτεί μόνο έναν (1) επιπλέον χώρο για τη χρονική μεταβλητή που χρησιμοποιείται για την εναλλαγή.ping τιμές. Επομένως, έχει πολυπλοκότητα χώρου O(1).

















