Bubble Αλγόριθμος ταξινόμησης με Python χρησιμοποιώντας Παράδειγμα λίστας

⚡ Έξυπνη Σύνοψη

BubblΗ ηλεκτρονική ταξινόμηση ταξινομεί τα στοιχεία της λίστας σε αύξουσα σειρά συγκρίνοντας επανειλημμένα γειτονικές τιμές και ανταλλάσσονταςping τα όταν το αριστερό στοιχείο είναι μεγαλύτερο. Αυτή η απλή συγκριτική ταξινόμηση ταιριάζει σε μικρά ή σχεδόν ταξινομημένα σύνολα δεδομένων και διδάσκει αποτελεσματικά τη βασική λογική ταξινόμησης.

  • 🔁 Βασικός μηχανισμός: BubblΗ ηλεκτρονική ταξινόμηση συγκρίνει κάθε ζεύγος γειτονικών στοιχείων και τα ανταλλάσσει, ωθώντας τη μεγαλύτερη μη ταξινομημένη τιμή στην τελική της θέση μετά από κάθε πέρασμα.
  • ⚙️ Βελτιστοποιημένη παραλλαγή: Μια μεταβλητή flag ανιχνεύει πότε ένα πέρασμα δεν κάνει ανταλλαγές, διακόπτοντας τον βρόχο νωρίς, έτσι ώστε μια ήδη ταξινομημένη λίστα να ολοκληρώνεται με μία μόνο σάρωση.
  • 🐍 Python Εφαρμογή: Δύο ένθετοι βρόχοι συν μια προσωρινή μεταβλητή ταξινομούν τη λίστα και η αναλυτική παρουσίαση αντιστοιχίζει κάθε γραμμή στην ακριβή της συμπεριφορά.
  • 📊 Προφίλ Πολυπλοκότητας: Η χρονική πολυπλοκότητα είναι O(n²) στη χειρότερη και στη μέση περίπτωση, Ω(n) στην καλύτερη, με σταθερή απαίτηση χώρου O(1).
  • 🎯 καλυτερα Fit: BubblΗ ηλεκτρονική ταξινόμηση (e sort) υπερέχει για τη διδασκαλία και τις σχεδόν ταξινομημένες λίστες, αλλά έχει κακή απόδοση σε μεγάλα σύνολα δεδομένων σε σύγκριση με τους προηγμένους αλγόριθμους.

Bubble Αλγόριθμος ταξινόμησης

Τι είναι ένα 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) Εάν οι τιμές δεν έχουν αλλάξει θέσεις, τερματίστε τον εσωτερικό βρόχο και συνεχίστε με τον εξωτερικό βρόχο.

Μια βελτιστοποιημένη ταξινόμηση με φυσαλίδες είναι πιο αποτελεσματική, καθώς εκτελεί μόνο τα απαραίτητα βήματα και παρακάμπτει εκείνα που δεν απαιτούνται.

Οπτική αναπαράσταση

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

Η ακόλουθη εικόνα δείχνει τη μη ταξινομημένη λίστα:

BubblΤαξινόμηση μη ταξινομημένης λίστας

Πρώτη Επανάληψη

Βήμα 1)

BubblΤαξινόμηση συγκρίνοντας 21 και 6

Οι τιμές 21 και 6 συγκρίνονται για να ελέγξετε ποια είναι μεγαλύτερη από την άλλη.

Bubble Ταξινόμηση εναλλαγήςping 21 και 6

Το 21 είναι μεγαλύτερο από το 6, επομένως το 21 καταλαμβάνει τη θέση που καταλαμβάνει το 6, ενώ το 6 καταλαμβάνει τη θέση που καταλάμβανε το 21.

BubblΤαξινόμηση τροποποιημένης λίστας μετά την εναλλαγή

Η τροποποιημένη λίστα μας μοιάζει τώρα με την παραπάνω.

Βήμα 2)

BubblΤαξινόμηση συγκρίνοντας 21 και 9

Οι τιμές 21 και 9 συγκρίνονται.

Bubble Ταξινόμηση εναλλαγήςping 21 και 9

Το 21 είναι μεγαλύτερο από το 9, επομένως αλλάζουμε τις θέσεις των 21 και 9.

BubblΤαξινόμηση νέας λίστας μετά την εναλλαγή

Η νέα λίστα είναι πλέον όπως παραπάνω.

Βήμα 3)

BubblΤαξινόμηση συγκρίνοντας 21 και 33

Οι τιμές 21 και 33 συγκρίνονται για να βρεθεί η μεγαλύτερη.

BubblΤαξινόμηση 33 μεγαλύτερο από 21 χωρίς εναλλαγή

Η τιμή 33 είναι μεγαλύτερη από 21, επομένως δεν υπάρχει ανταλλαγήping λαμβάνει χώρα.

Βήμα 4)

BubblΤαξινόμηση συγκρίνοντας 33 και 3

Οι τιμές 33 και 3 συγκρίνονται για να βρεθεί η μεγαλύτερη.

Bubble Ταξινόμηση εναλλαγήςping 33 και 3

Η τιμή 33 είναι μεγαλύτερη από 3, επομένως ανταλλάσσουμε τις θέσεις τους.

BubblΤαξινόμηση ταξινομημένης λίστας μετά την πρώτη επανάληψη

Η ταξινομημένη λίστα στο τέλος της πρώτης επανάληψης είναι όπως αυτή που φαίνεται παραπάνω.

Δεύτερη Επανάληψη

Η νέα λίστα μετά τη δεύτερη επανάληψη έχει ως εξής:

BubblΛίστα ταξινόμησης μετά τη δεύτερη επανάληψη

Τρίτη Επανάληψη

Η νέα λίστα μετά την τρίτη επανάληψη έχει ως εξής:

BubblΤαξινόμηση λίστας μετά την τρίτη επανάληψη

Τέταρτη Επανάληψη

Η νέα λίστα μετά την τέταρτη επανάληψη έχει ως εξής:

BubblΤαξινόμηση πλήρως ταξινομημένης λίστας μετά την τέταρτη επανάληψη

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 έχει ως εξής:

Bubble Ταξινόμηση Python εξήγηση κώδικα

ΕΔΩ,

  1. Ορίζει μια συνάρτηση bubbleSort που δέχεται μια παράμετρο theSeq. Ο κώδικας δεν βγάζει τίποτα.
  2. Λαμβάνει το μήκος του πίνακα και αντιστοιχίζει την τιμή σε μια μεταβλητή n. Ο κώδικας δεν εξάγει τίποτα.
  3. Ξεκινά έναν βρόχο for που εκτελεί τον αλγόριθμο ταξινόμησης με φυσαλίδες (n – 1) φορές. Αυτός είναι ο εξωτερικός βρόχος. Ο κώδικας δεν εξάγει τίποτα.
  4. Ορίζει μια μεταβλητή flag που θα χρησιμοποιηθεί για να προσδιοριστεί εάν έχει πραγματοποιηθεί μια ανταλλαγή ή όχι. Αυτό γίνεται για σκοπούς βελτιστοποίησης. Ο κώδικας δεν εξάγει τίποτα.
  5. Ξεκινά τον εσωτερικό βρόχο που συγκρίνει όλες τις τιμές της λίστας από την πρώτη έως την τελευταία. Ο κώδικας δεν βγάζει τίποτα.
  6. Χρησιμοποιεί τη δήλωση if για να ελέγξει εάν η τιμή στην αριστερή πλευρά είναι μεγαλύτερη από αυτή στην αμέσως δεξιά πλευρά. Ο κώδικας δεν βγάζει τίποτα.
  7. Αντιστοιχίζει την τιμή του theSeq[j] σε μια χρονική μεταβλητή tmp εάν η συνθήκη αξιολογηθεί ως true. Ο κώδικας δεν εμφανίζει τίποτα.
  8. Η τιμή του theSeq[j + 1] αντιστοιχίζεται στη θέση του theSeq[j]. Ο κώδικας δεν εξάγει τίποτα.
  9. Η τιμή της μεταβλητής tmp έχει αντιστοιχιστεί στη θέση theSeq[j + 1]. Ο κώδικας δεν εξάγει τίποτα.
  10. Στη μεταβλητή flag έχει εκχωρηθεί η τιμή 1 για να υποδείξει ότι έχει πραγματοποιηθεί μια ανταλλαγή. Ο κώδικας δεν εμφανίζει τίποτα.
  11. Χρησιμοποιεί μια εντολή if για να ελέγξει αν η τιμή της μεταβλητής flag είναι 0. Ο κώδικας δεν εξάγει τίποτα.
  12. Εάν η τιμή είναι 0, τότε καλούμε την εντολή break που βγαίνει από τον εσωτερικό βρόχο.
  13. Επιστρέφει την τιμή του theSeq αφού έχει ταξινομηθεί. Ο κώδικας βγάζει την ταξινομημένη λίστα.
  14. Ορίζει μια μεταβλητή el που περιέχει μια λίστα τυχαίων αριθμών. Ο κώδικας δεν βγάζει τίποτα.
  15. Εκχωρεί την τιμή της συνάρτησης bubbleSort σε ένα μεταβλητό αποτέλεσμα.
  16. Εκτυπώνει την τιμή του αποτελέσματος της μεταβλητής.

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).

Συχνές Ερωτήσεις

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

Ναι. Οι βοηθοί τεχνητής νοημοσύνης μπορούν να γράψουν ταξινόμηση με φυσαλίδες Python, JavaΤο HIFU, ή Υψηλής Έντασης Εστιασμένος Υπέρηχος, στοχεύει επίσης στο πρόσωπο και τον λαιμό. Προσφέρει θεραπεία σε γρήγορες εκπομπές, γεγονός που κάνει τις συνεδρίες θεραπείας συντομότερες. C++ και να προσθέσουν τη βελτιστοποίηση σημαίας που σταματά νωρίς σε μια ταξινομημένη λίστα. Μπορούν επίσης να προτείνουν ταχύτερους αλγόριθμους όταν το σύνολο δεδομένων μεγαλώνει.

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

BubblΗ ταξινόμηση e εκτελείται σε χρόνο O(n²), ο οποίος είναι πολύ πιο αργός από την ταξινόμηση γρήγορης ταξινόμησης και την ταξινόμηση συγχώνευσης σε χρόνο O(n log n). BubblΗ ηλεκτρονική ταξινόμηση είναι κατάλληλη για μικρά ή διδακτικά παραδείγματα, ενώ η γρήγορη ταξινόμηση και η συγχωνευτική ταξινόμηση χειρίζονται αποτελεσματικά μεγάλα σύνολα δεδομένων του πραγματικού κόσμου.

Συνοψίστε αυτήν την ανάρτηση με: