Στην εργασία με πληροφορίες, το πιο κερδοφόροοι τρόποι αποθήκευσης είναι δομές και συστοιχίες. Το τελευταίο μπορεί να περιέχει οποιαδήποτε δεδομένα του ίδιου τύπου που είναι βολικά για χρήση στο έργο του προγράμματος. Χρησιμοποιούνται συχνά σε διαδικτυακά καταστήματα και στην ανάπτυξη παιχνιδιών. Επομένως, τα δεδομένα που περιέχονται σε αυτά ταξινομούνται και ανταλλάσσονται επανειλημμένα και πραγματοποιούνται λογικές ή μαθηματικές πράξεις σε αυτά. Ένας από τους τρόπους για να φέρετε τάξη σε έναν πίνακα είναι η ταξινόμηση φυσαλίδων. Αυτή η έκδοση θα μελετήσει τον κώδικα του προγράμματος C και τη λογική μετάθεσης.
Τεχνικές δυσκολίες για τον προγραμματιστήΗ ταξινόμηση φυσαλίδων δεν αντιπροσωπεύει έναν μονοδιάστατο πίνακα, αν και χρησιμοποιείται σπάνια λόγω της χαμηλής απόδοσής του. Πιο συχνά θεωρείται στο στάδιο της προπόνησης ως το πιο απλό. Ωστόσο, απέχει πολύ από το πιο αποτελεσματικό. Ο αλγόριθμός του αποτελείται από εναλλασσόμενη σύγκριση ψηφίων και αμοιβαία επανεγγραφή κελιών, εάν πληρούται η προϋπόθεση.
Η πρώτη επανάληψη σταδιακά συγκρίνει δύογειτονικούς αριθμούς. Εάν το αριστερό είναι μεγαλύτερο, τότε αντικαθίσταται σε μέρη με το δεξί. Το μείον 8 και 0 δεν πληρούν τις προϋποθέσεις. Επομένως, δεν αλλάζουν θέση. Το μηδέν και το 5 δεν είναι επίσης κατάλληλα. 5 και 3 είναι κατάλληλα. Ωστόσο, σε μια τέτοια επανάληψη, το πλαίσιο ανάγνωσης δεν πέφτει στο πέντε, αλλά μετατοπίζεται προς τα δεξιά, αφού το 5 προηγουμένως συγκρίθηκε με το μηδέν. Αυτό σημαίνει ότι το επόμενο ζεύγος, 3 και 9. αλλάζει. Επιπλέον, ο αναγνώστης καλείται να δει όλες τις αντικαταστάσεις μόνος του χωρίς σχόλια του συγγραφέα και να μελετήσει τον αλγόριθμο ταξινόμησης φυσαλίδων.
Ως αποτέλεσμα όλων των επαναλήψεων, ο πίνακας γίνεται σταδιακάταξινομείται και βασικά συμβαίνει έτσι: μεγάλοι θετικοί αριθμοί κινούνται γρήγορα δεξιά, ενώ μικρότεροι και αρνητικοί αριθμοί κινούνται αργά προς τα αριστερά. Φαίνεται ότι οι φυσαλίδες αερίου στο υγρό επιπλέουν γρήγορα. Λόγω αυτής της αναλογίας, ο αλγόριθμος ονομάστηκε ταξινόμηση φυσαλίδων.
Ο ιδανικός αλγόριθμος ταξινόμησης πρέπει να είναιόσο το δυνατόν γρηγορότερα. Ταυτόχρονα, θα πρέπει να αφαιρέσει μια μικρή ποσότητα επεξεργαστή και πόρων μνήμης. Και μια διαδικασία όπως η διαλογή φυσαλίδων ενός πίνακα μπορεί να μην είναι η πιο ενεργειακά αποδοτική και κερδοφόρα. Ως εκ τούτου, δεν βρήκε ευρεία εφαρμογή. Εάν αυτή τη στιγμή υπάρχουν λιγότερα προβλήματα με τη μνήμη, τότε θα πρέπει να ανησυχείτε για τους πόρους του επεξεργαστή. Δεδομένου ότι οι ψηφιακές συστοιχίες μπορεί να είναι όχι μόνο μεγάλες, αλλά τεράστιες, η κατανάλωση πόρων υπολογιστών θα αποδειχθεί απρόβλεπτη.
Εάν η ταξινόμηση φυσαλίδων είναι, κατ 'αρχήν, γρήγορηΑντιμετωπίζει την τακτοποίηση των πραγμάτων σε μια σχετικά μικρή συστοιχία, τότε σε μια μεγάλη μπορεί να υπάρξουν αποτυχίες λόγω υπέρβασης πόρων. Αυτό σημαίνει ότι η ιδιότητα καθολικότητας που είναι εγγενής στον αλγόριθμο θα παραβιαστεί. Επιπλέον, η ταξινόμηση φυσαλίδων έχει πολυπλοκότητα Ν-τετραγώνου και απέχει πολύ από τον λογάριθμο της Ν πολυπλοκότητας. Επιπλέον, ο κίνδυνος αποτυχίας κατά την επεξεργασία ενός μεγάλου πίνακα αυξάνει τις πιθανότητες απώλειας δεδομένων λόγω αντικατάστασης κελιών. Η ταξινόμηση κατά εισαγωγές ή ο αλγόριθμος Shell θα είναι πολύ πιο κερδοφόρα από αυτή την άποψη.
Καθορίζεται παρακάτω σε γραφική εφαρμογήο κωδικός υπολογιστή για τη γλώσσα C επιτρέπει την ταξινόμηση φυσαλίδων. Αποδίδεται ως ξεχωριστή συνάρτηση του τύπου κενού. Δεν επιστρέφει τιμές, αλλά χρησιμοποιεί δείκτες για ανταλλαγή στοιχείων με βάση τις συνθήκες ταξινόμησης. Σε αυτήν την περίπτωση, ο κώδικας επιλύει το πρόβλημα της ταξινόμησης φυσαλίδων μιας σειράς ακεραίων με αύξουσα σειρά.
Για να εκτελέσει αυτή τη λειτουργία, ο χρήστης πρέπειδημιουργήστε έναν πίνακα που πρέπει να συμπληρωθεί με τις επιθυμητές τιμές. Αυτό μπορεί να γίνει χειροκίνητα, ορίζοντας τη διάσταση και τον αριθμό των στοιχείων στην αρχή του προγράμματος. Στη συνέχεια, μπορείτε να γεμίσετε τον πίνακα με σταθερές τιμές. Η δεύτερη επιλογή είναι η δημιουργία ενός καθολικού προγράμματος δηλώνοντας μια μεγάλη μονοδιάστατη συστοιχία 100 στοιχείων.
Ρυθμίζοντας μια ακέραια μεταβλητή και εκχωρώντας σε αυτήντην τιμή που διαβάζεται από το πληκτρολόγιο, μπορείτε να περιορίσετε τον αριθμό των κελιών που θα συμπληρωθούν. Είναι επίσης δυνατή η εφαρμογή της λειτουργίας εισαγωγής στοιχείων πίνακα από το χρήστη από το πληκτρολόγιο χρησιμοποιώντας τη λειτουργία scanf ("% d", & value). Σε αυτό το παράδειγμα, το "% d" είναι μια συμβολοσειρά τροποποίησης που λέει στον μεταγλωττιστή ότι μια ακέραιη τιμή θα επιστρέψει μετά τη σάρωση. Η μεταβλητή τιμή θα αποθηκεύσει μια τιμή που είναι το μέγεθος ενός μονοδιάστατου ακέραιου πίνακα.
Για να χρησιμοποιήσετε έναν αλγόριθμο ταξινόμησης, θα πρέπειμεταφέρετε το όνομα του πίνακα και το μέγεθος του στη συνάρτηση. Στην κατάσταση που παρουσιάζεται σε μια γραφική εφαρμογή, η κλήση στη λειτουργία ταξινόμησης θα μοιάζει με αυτήν: BubleSort (dataArray, sizeDataArray). Φυσικά, στο τέλος της γραμμής μετά τη συνάρτηση, πρέπει να βάλετε ένα ερωτηματικό αντί τελείας, όπως απαιτείται από τους κανόνες σύνταξης του προγράμματος. Έτσι το dataArray είναι το όνομα του πίνακα που πρέπει να ταξινομηθεί και το sizeDataArray είναι το μέγεθός του.
Μεταφορά αυτών των παραμέτρων στη συνάρτηση BubleSort ()θα οδηγήσει στο γεγονός ότι αντί να χρησιμοποιήσετε το sizeArray, όπως μπορείτε να δείτε στο σχήμα, σε ένα πραγματικό πρόγραμμα, οι λειτουργίες θα εκτελούνται με το sizeDataArray. Αυτό σημαίνει επίσης ότι ο ακέραιος πίνακας dataArray θα χρησιμοποιηθεί στη συνάρτηση BubleSort (). Οι λειτουργίες printArrayFunction () και ArrayIntegerInputFunction () καλούνται με τον ίδιο τρόπο. Το πρώτο είναι υπεύθυνο για την εκτύπωση, δηλαδή για την εμφάνιση στοιχείων στην κονσόλα. Και το δεύτερο χρειάζεται για να το γεμίσετε με στοιχεία που εισάγει ο χρήστης από το πληκτρολόγιο.
Αυτό το στυλ προγραμματισμού όταν είναι απομονωμένοοι λειτουργίες πραγματοποιούνται με τη μορφή συναρτήσεων, αυξάνουν σημαντικά την αναγνωσιμότητα του κώδικα και επιταχύνουν την ανάπτυξή του. Σε ένα τέτοιο πρόγραμμα, η πλήρωση του πίνακα από το πληκτρολόγιο, η εκτύπωσή του και η ίδια η ταξινόμηση φούσκας αφαιρούνται ξεχωριστά. Το τελευταίο μπορεί να χρησιμοποιηθεί για την παραγγελία δεδομένων ή ως δευτερεύουσα συνάρτηση για την εύρεση του ελάχιστου και του μέγιστου ενός πίνακα.
Η ταξινόμηση εισαγωγής προϋποθέτειεναλλακτικά συγκρίνοντας κάθε στοιχείο και χτίζοντας μια αλυσίδα στοιχείων που έχουν ήδη ταξινομηθεί ανάλογα με την κατάσταση. Ως αποτέλεσμα, το αποτέλεσμα κάθε επόμενης σύγκρισης είναι η αναζήτηση ενός κελιού στο οποίο μπορεί να τοποθετηθεί μια νέα τιμή. Αλλά η εισαγωγή καθενός από αυτά εκτελείται στο ήδη ταξινομημένο τμήμα του πίνακα.
Αυτή η επεξεργασία είναι ταχύτερη και λιγότερο υπολογιστικά πολύπλοκη. Ο κωδικός C παρουσιάζεται σε μια γραφική εφαρμογή.
Αποδίδεται επίσης ως συνάρτηση, στην οποία στοτο όνομα του πίνακα που πρέπει να παραγγελθεί και το μέγεθος του πίνακα περνούν ως ορίσματα. Εδώ μπορείτε να δείτε πόσο αργή είναι η ταξινόμηση φυσαλίδων. Τα ένθετα εκτελούν παρόμοια εργασία πολύ πιο γρήγορα και έχουν συμπαγή κωδικό προγράμματος.