Μέθοδοι ταξινόμησης και παραλλαγές τους με παραδείγματα


ΤΑΞΙΝΟΜΗΣΗ

Ευθείας Ανταλλαγής ( Straight Exchange Sort) ή Φυσαλίδας (Bubble Sort) - Η πιο απλή αλλά και πιο αργή μέθοδος.

Αλγόριθμος Φυσαλίδα_1
Δεδομένα //table,n//
Για i από 2 μέχρι n
  Για j από n μέχρι i με_βήμα -1
    Αν table[j]<table[-1] τότε
      temp table[-1]
      table[-1]← table[j]
      table[j]← temp
    Τέλος_Αν
  Τέλος_Επανάληψης
Τέλος_Επανάληψης
Αποτελέσματα //table//
Τέλος Φυσαλίδα_1

Παραλλαγή του αλγορίθμου ώστε να σταματά όταν διαπιστωθεί ότι τα στοιχεία είναι ταξινομημένα.
Αλγόριθμος Φυσαλίδα_2
Δεδομένα // table, n // 
 2
Αρχή_επανάληψης
  ΤΑΞΙΝΟΜΗΘΗΚΕ  ΑΛΗΘΗΣ
  Για j από n μέχρι i με_βήμα -1
    Αν table[j] < table[- 1] τότε
      temp  table[- 1] 
      table[- 1]  table[j] 
      table[j]  temp
      ΤΑΞΙΝΟΜΗΘΗΚΕ  ΨΕΥΔΗΣ
    Τέλος_αν
  Τέλος_επανάληψης
   i + 1
Μέχρις_ότου ΤΑΞΙΝΟΜΗΘΗΚΕ = ΑΛΗΘΗΣ
Αποτελέσματα // table // 
Τέλος Φυσαλίδα_2

Να γραφεί πρόγραμμα το οποίο να διαβάζει τα ονόματα, την εθνικότητα και τους χρόνους οκτώ αθλητών στο δρόμο των 100 μέτρων και να τους εμφανίζει (χρόνος – όνομα – εθνικότητα) αρχίζοντας από το γρηγορότερο και καταλήγοντας στον πιο αργό αθλητή.

ΠΡΟΓΡΑΜΜΑ ΑΘΛΗΤΕΣ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, j
  ΠΡΑΓΜΑΤΙΚΕΣ: ΧΡΟΝΟΣ[8], temp1
  ΧΑΡΑΚΤΗΡΕΣ: ΑΘΛΗΤΗΣ[8, 2], temp2
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 8  ! ΕΙΣΑΓΩΓΗ ΣΤΟΙΧΕΙΩΝ ΣΕ ΔΥΟ ΠΙΝΑΚΕΣ
    ΓΡΑΨΕ 'Δώσε το όνομα του αθλητή της διαδρομής Νο : ', i
    ΔΙΑΒΑΣΕ ΑΘΛΗΤΗΣ[i, 1]
    ΓΡΑΨΕ 'Δώσε τη χώρα του αθλητή της διαδρομής Νο : ', i
    ΔΙΑΒΑΣΕ ΑΘΛΗΤΗΣ[i, 2]
    ΓΡΑΨΕ 'Δώσε το χρόνο του αθλητή της διαδρομής Νο : ', i
    ΔΙΑΒΑΣΕ ΧΡΟΝΟΣ[i]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 8  ! ΤΑΞΙΝΟΜΗΣΗ ΦΥΣΣΑΛΙΔΑΣ ΚΑΙ ΤΩΝ ΔΥΟ ΠΙΝΑΚΩΝ
    ΓΙΑ j ΑΠΟ 8 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1
      ΑΝ  ΧΡΟΝΟΣ[j] < ΧΡΟΝΟΣ[j - 1] ΤΟΤΕ
        temp1 <- ΧΡΟΝΟΣ[j - 1]
        ΧΡΟΝΟΣ[j - 1] <- ΧΡΟΝΟΣ[j]
        ΧΡΟΝΟΣ[j] <- temp1
        temp2 <- ΑΘΛΗΤΗΣ[j - 1, 1]
        ΑΘΛΗΤΗΣ[j - 1, 1] <- ΑΘΛΗΤΗΣ[j, 1]
        ΑΘΛΗΤΗΣ[j, 1] <- temp2
        temp2 <- ΑΘΛΗΤΗΣ[j - 1, 2]
        ΑΘΛΗΤΗΣ[j - 1, 2] <- ΑΘΛΗΤΗΣ[j, 2]
        ΑΘΛΗΤΗΣ[j, 2] <- temp2
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΡΑΨΕ 'ΧΡΟΝΟΣ          ΟΝΟΜΑ           ΧΩΡΑ' ! ΕΜΦΑΝΙΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 8
    ΓΡΑΨΕ ΧΡΟΝΟΣ[i], ΑΘΛΗΤΗΣ[i, 1], ΑΘΛΗΤΗΣ[i, 2]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΑΘΛΗΤΕΣ

Να γίνει πρόγραμμα που να ζητάει την ονομασία και την τιμή για 20 φαγητά και στη συνέχεια να εμφανίζει αυτά τα στοιχεία ταξινομημένα σε αλφαβητική σειρά (τιμοκατάλογος).

ΠΡΟΓΡΑΜΜΑ Τιμοκατάλογος_εστιατορίου

ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, j
  ΠΡΑΓΜΑΤΙΚΕΣ: τιμές[20], temp2
  ΧΑΡΑΚΤΗΡΕΣ: ονόματα[20], temp1

ΑΡΧΗ

  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20
    ΓΡΑΨΕ 'Δώσε το όνομα του ', i, ' ου φαγητού:'
    ΔΙΑΒΑΣΕ ονόματα[i] 
    ΓΡΑΨΕ 'Δώσε την τιμή αυτού του φαγητού:'
    ΔΙΑΒΑΣΕ τιμές[i] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 20
    ΓΙΑ j ΑΠΟ 20 ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
      ΑΝ ονόματα[j] < ονόματα[- 1] ΤΟΤΕ
        temp1 <- ονόματα[- 1] 
        ονόματα[- 1] <- ονόματα[j] 
        ονόματα[j] <- temp1
        temp2 <- τιμές[- 1] 
        τιμές[- 1] <- τιμές[j] 
        τιμές[j] <- temp2
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΡΑΨΕ 'ΑΛΦΑΒΗΤΙΚΟΣ ΤΙΜΟΚΑΤΑΛΟΓΟΣ ΦΑΓΗΤΩΝ'
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20
    ΓΡΑΨΕ ονόματα[i], ' :     ', τιμές[i] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ




Mε Επιλογή (selection sort)
Αλγόριθμος Selection_Sort
Δεδομένα // table, n // 
Για i από 1 μέχρι n - 1
  θέση_min  i
  min  table[i] 
  Για j από i + 1 μέχρι n
    Αν table[j] < min τότε
      min  table[j] 
      θέση_min  j
    Τέλος_αν
  Τέλος_επανάληψης
  table[θέση_min]  table[i] 
  table[i]  min
Τέλος_επανάληψης
Τέλος Selection_Sort

ΠΡΟΓΡΑΜΜΑ Selection_Sort
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, j, θέση_min, min, table[20] 
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20         !Γέμισμα πίνακα
    ΓΡΑΨΕ 'Δώσε το ', i, ' στοιχείο του πίνακα'
    ΔΙΑΒΑΣΕ table[i] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 19         !Ταξινόμηση πίνακα
    θέση_min <- i
    min <- table[i] 
    ΓΙΑ j ΑΠΟ i + 1 ΜΕΧΡΙ 20
      ΑΝ table[j] < min ΤΟΤΕ
        min <- table[j] 
        θέση_min <- j
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    table[θέση_min] <- table[i] 
    table[i] <- min
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΡΑΨΕ 'Εκτύπωση με ταξινομημένα στοιχεία'
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20
    ΓΡΑΨΕ table[i] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου