ΥπολογιστέςΠρογραμματισμός

Διαλογή τεχνικές στον προγραμματισμό: διαλογή «φούσκα»

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

Πού έκανε ένα τέτοιο ασυνήθιστο όνομα;

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

Περιγραφή του αλγορίθμου

φούσκα είδος γίνεται ως εξής:

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

Ακόμη μικρότερη αλγόριθμο του προγράμματος μπορεί να γραφτεί ως:

  • μία συστοιχία αριθμών ελέγχεται εφ 'όσον βρεθούν δύο αριθμούς, το δεύτερο από αυτά είναι βέβαιο ότι θα είναι μεγαλύτερη από την πρώτη?
  • λανθασμένα τοποθετημένη σε σχέση με κάθε άλλα στοιχεία των swaps λογισμικού συστοιχίας.

Ψευδοκώδικας με βάση τον αλγόριθμο που περιγράφεται

Η απλούστερη εφαρμογή πραγματοποιείται ως εξής:

Διαδικασία Sortirovka_Puzirkom?

αρχή

κύκλος για j από nachalnii_index να konechii_index?

κύκλος για i από nachalnii_index να konechii_index-1?

εάν massiv [i]> massiv [i + 1] (πρώτο στοιχείο μεγαλύτερη από ένα δευτερόλεπτο), τότε:

(Αλλαγή τοποθετεί τιμές)?

τέλος

Φυσικά, αυτή η απλότητα επιδεινώνει μόνο την κατάσταση: η απλούστερη ο αλγόριθμος, τόσο περισσότερο εκδηλώνεται όλες τις ατέλειες. αναλογία επένδυση του χρόνου είναι πολύ μεγάλη, ακόμη και για μια μικρή σειρά (εδώ έρχεται σε σχετικότητας: Ο χρόνος για τον κοινό πολίτη μπορεί να φαίνεται μικρό, αλλά στην πραγματικότητα έναν προγραμματιστή κάθε δεύτερη ή ακόμα και χιλιοστών του δευτερολέπτου μετράει).

Πήρε την καλύτερη εφαρμογή. Για παράδειγμα, λαμβάνοντας υπόψη την ανταλλαγή αξιών σε περιοχές συστοιχία:

Διαδικασία Sortirovka_Puzirkom?

αρχή

sortirovka = true?

κύκλο μέχρι sortirovka = true?

sortirovka = false?

κύκλος για i από nachalnii_index να konechii_index-1?

εάν massiv [i]> massiv [i + 1] (πρώτο στοιχείο μεγαλύτερη από ένα δευτερόλεπτο), τότε:

(Αλλάξτε τα στοιχεία θέσεις)?

sortirovka = true? (Διαπίστωσε ότι η ανταλλαγή έχει γίνει).

Τέλος.

περιορισμοί

Το κύριο μειονέκτημα - η διάρκεια της διαδικασίας. Πόσο χρόνο γίνεται η διαλογή αλγόριθμο φούσκα;

Ο μόλυβδος χρόνος υπολογίζεται από τον αριθμό των τετραγωνικών αριθμών στη συστοιχία - το τελικό αποτέλεσμα του είναι ανάλογη.

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

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

αξιοπρέπεια

φούσκα του είδους είναι πολύ εύκολο να καταλάβει. Το αναλυτικό πρόγραμμα των τεχνικών πανεπιστημίων στη μελέτη των στοιχείων παραγγελίας του πίνακα του να περάσει στην πρώτη θέση. Η μέθοδος είναι εύκολο να εφαρμοστεί τόσο της γλώσσας Δελφών προγραμματισμού (L (Δελφοί), και την C / C ++ (C / C συν συν), ένα απίστευτα απλό τιμές του αλγορίθμου θέση με τη σωστή σειρά και ο Pascal (Pascal). Φούσκα του είδους είναι ιδανική για αρχάριους.

Λόγω των μειονεκτημάτων του αλγορίθμου δεν χρησιμοποιείται σε εξωσχολικές σκοπούς.

αρχή της Visual διαλογή

Η αρχική άποψη της συστοιχίας 8 22 4 74 44 37 1 7

Βήμα 8 22 1 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

Βήμα 1 4 5 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

Βήμα 1 4 7 8 7 22 37 44 74

φούσκα είδος παράδειγμα σε Pascal

παράδειγμα:

const kol_mas = 10?

var massiv: array [1..kol_mas] του ακεραίου?

a, b, k: ακέραιος?

αρχίσει

writeln ( 'εισόδου', kol_mas, 'στοιχεία της συστοιχίας')?

για ένα: = 1 έως kol_mas κάνουμε Readln (massiv [α ])?

για: = 1 έως kol_mas-1 κάνει αρχίσουν

για b: = a + 1 έως kol_mas αρχίσει μην

αν massiv [a]> massiv [ b] στη συνέχεια να αρχίσει

k: = massiv [α]? massiv [α]: = massiv [ b]? massiv [b]: = k?

τελειώσει?

τελειώσει?

τελειώσει?

writeln ( «μετά το είδος»)?

για ένα: = 1 έως kol_mas κάνουμε writeln (massiv [α ])?

τέλος.

φούσκα ΠΑΡΑΔΕΙΓΜΑ διαλογής στη γλώσσα C (C)

παράδειγμα:

#include

#include

int main (int argc, char * argv [])

{

int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff?

για (;;) {

ff = 0?

για (i = 7? θ> 0? i -) {

εάν (massiv [i] [i- 1]) {

ανταλλαγής (massiv [i], massiv [i- 1])?

ff ++?

}

}

εάν (ff == 0) σπάσει?

}

getch ()? // καθυστέρηση εμφάνισης

επιστρέψει 0?

}.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 el.birmiss.com. Theme powered by WordPress.