/ / / Διαμόρφωση φυσαλίδων μονοδιάστατου πίνακα: αλγόριθμος, κωδικός προγράμματος C

Ρύθμιση φυσαλίδων μονοδιάστατου πίνακα: αλγόριθμος, κώδικας προγράμματος σε γλώσσα C

Σε συνεργασία με τις πληροφορίες, το πιο κερδοφόροτρόποι αποθήκευσης είναι δομές και συστοιχίες. Το τελευταίο μπορεί να περιέχει δεδομένα ενός τύπου, τα οποία είναι βολικά χρήσιμα στο πρόγραμμα. Συχνά χρησιμοποιούνται στη δουλειά των ηλεκτρονικών καταστημάτων και στην ανάπτυξη παιχνιδιών. Επομένως, τα δεδομένα που περιέχονται σε αυτά επανειλημμένα ταξινομούνται και ανταλλάσσονται και εκτελούνται λογικές ή μαθηματικές πράξεις. Ένας τρόπος να φέρουμε την τάξη στον πίνακα είναι η διαλογή φυσαλίδων. Αυτή η δημοσίευση θα μελετήσει τον κώδικα C και τη λογική των μεταλλαγών.

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

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

ταξινόμηση φυσαλίδων

Βήμα-βήμα περιγραφή ταξινόμησης

Στην πρώτη επανάληψη, δύογειτονικούς αριθμούς. Εάν το αριστερό είναι μεγαλύτερο, τότε ξαναγράφεται σε τόπους με το σωστό. Μείον 8 και 0 οι συνθήκες δεν ικανοποιούν. Αυτός είναι ο λόγος για τον οποίο δεν αλλάζουν σε μέρη. Το μηδέν και το 5 επίσης δεν ταιριάζουν. 5 και 3 είναι κατάλληλα. Ωστόσο, σε αυτή την επανάληψη το πλαίσιο ανάγνωσης δεν εμπίπτει στην πρώτη πέμπτη θέση, αλλά μετατοπίζεται προς τα δεξιά, από το 5 πριν συγκρίνεται με το μηδέν. Αυτό σημαίνει ότι το επόμενο ζευγάρι - 3 και 9 αλλάζει θέσεις και στη συνέχεια ο αναγνώστης προσφέρεται να εξετάσει όλες τις αντικαταστάσεις ανεξάρτητα από τα σχόλια του συγγραφέα και να μελετήσει τον αλγόριθμο της διαλογής φυσαλίδων.

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

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

Εκτίμηση της υπολογιστικής πολυπλοκότητας

Ο ιδανικός αλγόριθμος ταξινόμησης πρέπει να είναιόσο το δυνατόν γρηγορότερα. Ταυτόχρονα, θα πρέπει να πάρει μια μικρή ποσότητα πόρων CPU και μνήμης. Και μια τέτοια διαδικασία, όπως μια διαλογή φυσαλίδων μιας συστοιχίας, δεν μπορεί να είναι η πιο ενεργειακά αποδοτική και κερδοφόρα. Λόγω της ευρείας εφαρμογής του, δεν βρήκε. Εάν υπάρχουν λιγότερα προβλήματα στη μνήμη αυτή τη στιγμή, τότε οι πόροι του επεξεργαστή θα πρέπει να ανησυχούν. Δεδομένου ότι οι ψηφιακές συστοιχίες δεν είναι μόνο μεγάλες, αλλά τεράστιες, τότε η κατανάλωση πόρων υπολογιστών θα είναι απρόβλεπτη.

Εάν η διαλογή φυσαλίδων είναι, κατ 'αρχήν, γρήγορηαντιμετωπίζει την τάξη σε σχετικά μικρή κλίμακα, τότε σε μεγάλο βαθμό μπορεί να υπάρξουν αποτυχίες λόγω υπερβολικής δαπάνης πόρων. Αυτό σημαίνει ότι θα παραβιαστεί η ιδιότητα καθολικότητας που είναι εγγενής στον αλγόριθμο. Και η ταξινόμηση από μια φούσκα έχει Ν-τετραγωνική πολυπλοκότητα και είναι πολύ μακριά από τον λογάριθμο της πολυπλοκότητας Ν. Επιπλέον, ο κίνδυνος αποτυχίας στην επεξεργασία μιας μεγάλης συστοιχίας αυξάνει τις πιθανότητες απώλειας δεδομένων λόγω της αντικατάστασης κυττάρων. Πολύ πιο κερδοφόρα από αυτή την άποψη θα είναι η διαλογή εισαγωγής ή ο αλγόριθμος Shell.

Κωδικός λογισμικού

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

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

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

Δηλώνοντας και αρχικοποιώντας έναν πίνακα

Αντιστοίχιση μιας μεταβλητής ακέραιας και εκχώρηση τηςΗ τιμή που διαβάζεται από το πληκτρολόγιο μπορεί να περιορίσει τον αριθμό των κελιών που θα πληρωθούν. Μπορείτε επίσης να εφαρμόσετε τη λειτουργία της εισαγωγής στοιχείων ενός πίνακα από το χρήστη από το πληκτρολόγιο, χρησιμοποιώντας τη λειτουργία scanf ("% d", & value). Σε αυτό το παράδειγμα, το "% d" είναι μια τροποποιητική συμβολοσειρά που λέει στον μεταγλωττιστή ότι μια ακέραια τιμή θα ληφθεί μετά τη σάρωση. Η μεταβλητή τιμή θα αποθηκεύσει μια τιμή που είναι το μέγεθος ενός μονοδιάστατου πίνακα ακέραιων αριθμών.

Για να χρησιμοποιήσετε τον αλγόριθμο ταξινόμησης, πρέπειγια να περάσει στη συνάρτηση το όνομα του πίνακα και το μέγεθός του. Στην κατάσταση που φαίνεται στην γραφική εφαρμογή, καλέστε τη λειτουργία του είδους θα μοιάζει με αυτό: BubleSort (DataArray, sizeDataArray). Φυσικά, στο τέλος της γραμμής, μετά τη λειτουργία, βάλτε ένα ερωτηματικό αντί για ένα χρονικό διάστημα, όπως απαιτείται από τους κανόνες της σύνταξης του προγράμματος. Έτσι, DataArray - είναι το όνομα του πίνακα για να ταξινομηθούν και sizeDataArray - είναι το μέγεθός του.

ταξινόμηση συστοιχιών φυσαλίδων

Περάστε αυτές τις παραμέτρους στη λειτουργία BubleSort ()θα έχει ως αποτέλεσμα ότι αντί να χρησιμοποιήσετε το μέγεθοςArray, όπως μπορείτε να δείτε στο σχήμα, σε ένα πραγματικό πρόγραμμα οι λειτουργίες θα εκτελούνται με sizeDataArray. Αυτό σημαίνει επίσης ότι η συνάρτηση BubleSort () θα χρησιμοποιεί ένα ακέραιο dataArray. Ομοίως, καλούνται η λειτουργία printArrayFunction () και ArrayIntegerInputFunction (). Ο πρώτος είναι υπεύθυνος για την εκτύπωση, δηλαδή για την έξοδο στην κονσόλα των στοιχείων. Και το δεύτερο είναι απαραίτητο για να το γεμίσετε με στοιχεία που εισάγει ο χρήστης από το πληκτρολόγιο.

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

Εισαγωγή ταξινόμησης

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

ένθετα ταξινόμησης φυσαλίδων

Μια τέτοια επεξεργασία είναι ταχύτερη και έχει λιγότερη υπολογιστική πολυπλοκότητα. Ο κώδικας C παρουσιάζεται στην γραφική εφαρμογή.

πραγματοποιήστε ταξινόμηση φυσαλίδων

Παρέχεται επίσης με τη μορφή μιας συνάρτησης στην οποίαΩς επιχειρήματα, μεταφέρονται το όνομα του πίνακα που πρέπει να παραγγελθεί και το μέγεθος του πίνακα. Εδώ μπορείτε να δείτε πόσο αργός είναι ο τύπος φυσαλίδων. Εισάγει παρόμοια εργασία είναι πολύ ταχύτερη και έχει έναν συμπαγή κώδικα.

Διαβάστε περισσότερα: