shell sort c with examples
Τεχνική ταξινόμησης κελύφους σε C ++: Μια πλήρης επισκόπηση.
Το είδος κελύφους συχνά ονομάζεται βελτίωση σε σχέση με το είδος εισαγωγής. Στο είδος εισαγωγής, παίρνουμε αυξήσεις κατά 1 για να συγκρίνουμε στοιχεία και να τα τοποθετούμε στη σωστή τους θέση.
Σε κελύφη ταξινόμηση, η λίστα ταξινομείται διαιρώντας την σε μια σειρά από μικρότερες δευτερεύουσες λίστες. Δεν είναι απαραίτητο οι λίστες να είναι με συνεχόμενα στοιχεία. Αντ 'αυτού, η τεχνική ταξινόμησης κελύφους χρησιμοποιεί το increment i, το οποίο ονομάζεται επίσης «κενό» και τη χρησιμοποιεί για να δημιουργήσει μια λίστα στοιχείων που είναι στοιχεία «i».
=> Δείτε εδώ για να εξερευνήσετε την πλήρη λίστα μαθημάτων C ++.
γωνιακές ερωτήσεις και απαντήσεις για συνέντευξη js
Τι θα μάθετε:
Γενικός αλγόριθμος
Ο γενικός αλγόριθμος για ταξινόμηση κελύφους δίνεται παρακάτω.
shell_sort (A, N)
όπου Α - λίστα προς ταξινόμηση. N - διάκενο_μεγέθους
ορίστε gap_size = N, flag = 1
ενώ το gap_size> 1 ή flag = 1, επαναλάβετε
να αρχίσει
ορισμός σημαίας = 0
ορισμός gap_size = (gap_size + 1) / 2
τέλος
για i = 0 έως i<(N-gap_size) repeat
να αρχίσει
αν A (i + gap_size)> A (i)
ανταλλαγή A (i + gap_size), A (i)
ορισμός σημαίας = 0
τέλος
τέλος
Έτσι, στον παραπάνω αλγόριθμο, ορίσαμε πρώτα το N που είναι το κενό για την ταξινόμηση του πίνακα Α χρησιμοποιώντας την ταξινόμηση κελύφους. Στο επόμενο βήμα, χωρίζουμε τον πίνακα σε υπο-πίνακες χρησιμοποιώντας το κενό. Στη συνέχεια, στο επόμενο βήμα, ταξινομούμε κάθε μία από τις δευτερεύουσες συστοιχίες έτσι ώστε στο τέλος του βρόχου να έχουμε μια ταξινομημένη σειρά.
Στη συνέχεια, ας εξετάσουμε ένα λεπτομερές παράδειγμα για να κατανοήσουμε καλύτερα το είδος κελύφους χρησιμοποιώντας μια εικονογραφική αναπαράσταση.
Απεικόνιση
Ας απεικονίσουμε το είδος Shell με ένα παράδειγμα.
Εξετάστε την ακόλουθη σειρά 10 στοιχείων.
Εάν παρέχουμε ένα κενό 3, τότε θα έχουμε τις ακόλουθες δευτερεύουσες λίστες με κάθε στοιχείο που διαχωρίζει 3 στοιχεία. Στη συνέχεια ταξινομούμε αυτές τις τρεις λίστες.
Οι ταξινομημένες δευτερεύουσες λίστες και η προκύπτουσα λίστα που λαμβάνουμε αφού συνδυάσουμε τις τρεις ταξινομημένες δευτερεύουσες λίστες εμφανίζονται παρακάτω.
Ο παραπάνω πίνακας που έχουμε αποκτήσει μετά τη συγχώνευση των ταξινομημένων υποζώνων έχει σχεδόν ταξινομηθεί. Τώρα μπορούμε να πραγματοποιήσουμε ταξινόμηση εισαγωγής σε αυτήν τη λίστα και ταξινόμηση ολόκληρου του πίνακα. Αυτό το τελευταίο βήμα εμφανίζεται παρακάτω για την αναφορά σας.
Όπως φαίνεται παραπάνω, μετά την εκτέλεση της ταξινόμησης κελύφους και τη συγχώνευση των ταξινομημένων λιστών, απαιτήσαμε μόνο τρεις κινήσεις για να ταξινομήσουμε πλήρως τη λίστα. Έτσι μπορούμε να δούμε ότι μπορούμε να μειώσουμε σημαντικά τον αριθμό των βημάτων που απαιτούνται για την ταξινόμηση του πίνακα.
Η επιλογή αύξησης για τη δημιουργία υπο-λιστών είναι ένα μοναδικό χαρακτηριστικό του είδους κελύφους.
Παράδειγμα C ++
Ας δούμε την εφαρμογή της ταξινόμησης κελύφους στο C ++ παρακάτω.
#include using namespace std; // shellsort implementation int shellSort(int arr(), int N) { for (int gap = N/2; gap > 0; gap /= 2) { for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } int main() { int arr() = {45,23,53,43,18,24,8,95,101}, i; //Calculate size of array int N = sizeof(arr)/sizeof(arr(0)); cout << 'Array to be sorted:
'; for (int i=0; i Παραγωγή:
Σειρά προς ταξινόμηση:
45 23 53 43 18 24 8 95 101
Διάταξη μετά το κέλυφος:
8 18 23 24 43 45 53 95 101
Έχουμε χρησιμοποιήσει την ίδια λίστα που χρησιμοποιήσαμε στην εικόνα και μπορούμε να δούμε ότι αρχίζουμε αρχικά δημιουργώντας δύο δευτερεύουσες λίστες και στη συνέχεια περιορίζουμε το κενό. Μόλις δημιουργηθούν δευτερεύουσες λίστες σύμφωνα με το κενό που καθορίζεται, ταξινομούμε κάθε μία από τις δευτερεύουσες λίστες. Αφού ταξινομηθούν όλες οι δευτερεύουσες λίστες, λαμβάνουμε τη λίστα σχεδόν ταξινομημένης. Τώρα αυτή η λίστα μπορεί να ταξινομηθεί χρησιμοποιώντας το βασικό είδος εισαγωγής που θα πάρει πολύ λίγες κινήσεις.
Στη συνέχεια, ας εφαρμόσουμε την ταξινόμηση κελύφους χρησιμοποιώντας τη γλώσσα Java.
Παράδειγμα Java
// Java class for ShellSort class ShellSort { //function to sort the array using shell sort int sort(int arr()) { int N = arr.length; // Start with a big gap, then narrow the gap for (int gap = N/2; gap > 0; gap /= 2) { //sort sub lists created by applying gap for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } } class Main{ public static void main(String args()) { int arr() = {45,23,53,43,18,24,8,95,101}; int N = arr.length; System.out.println('Array to be sorted: '); for (int i=0; i Παραγωγή:
Σειρά προς ταξινόμηση:
45 23 53 43 18 24 8 95 101
Διάταξη μετά το κέλυφος:
8 18 23 24 43 45 53 95 101
Έχουμε εφαρμόσει την ίδια λογική για ταξινόμηση κελύφους σε προγράμματα C ++ και Java. Έτσι, όπως εξηγείται παραπάνω στο πρόγραμμα Java, διαιρούμε πρώτα τον πίνακα σε δευτερεύουσες σειρές και μετά ταξινομήσαμε τους για να λάβουμε έναν πλήρη ταξινομημένο πίνακα.
συμπέρασμα
Η ταξινόμηση κελύφους είναι ο πολύ αποδοτικός αλγόριθμος που επιφέρει βελτίωση σε σχέση με τον τύπο εισαγωγής.
Ενώ η ταξινόμηση εισαγωγής λειτουργεί αυξάνοντας τα στοιχεία της κατά 1, η ταξινόμηση κελύφους χρησιμοποιεί την παράμετρο «κενό» για να διαιρέσει τον πίνακα σε υπο-συστοιχίες των οποίων τα στοιχεία διαχωρίζονται μεταξύ τους. Στη συνέχεια, μπορούμε να ταξινομήσουμε τη μεμονωμένη λίστα χρησιμοποιώντας το είδος εισαγωγής για να αποκτήσουμε τον πλήρη ταξινομημένο πίνακα.
Η ταξινόμηση κελύφους αποδίδει ταχύτερα από την ταξινόμηση εισαγωγής και παίρνει λιγότερες κινήσεις για την ταξινόμηση του πίνακα σε σύγκριση με την ταξινόμηση εισαγωγής. Το επερχόμενο σεμινάριό μας θα διερευνήσει τα πάντα για την τεχνική ταξινόμησης σωρού για τη διαλογή δομών δεδομένων.
=> Επισκεφθείτε εδώ για να μάθετε C ++ από το μηδέν.
Συνιστώμενη ανάγνωση
- Επιλογή Ταξινόμηση σε C ++ με παραδείγματα
- MongoDB Sort () Μέθοδος με παραδείγματα
- Unix Sort Command με Σύνταξη, Επιλογές και Παραδείγματα
- Ταξινόμηση Bubble σε C ++ με παραδείγματα
- Εισαγωγή Ταξινόμηση σε C ++ με παραδείγματα
- Συγχώνευση ταξινόμησης σε C ++ με παραδείγματα
- Ταξινόμηση σωρού σε C ++ με παραδείγματα
- Γρήγορη ταξινόμηση σε C ++ με παραδείγματα