Ταξινόμηση δισδιάστατου πίνακα

Ας υποθέσουμε ότι μας δίνεται ένας πίνακας δύο διαστάσεων 3 γραμμών και 4 στηλών όπως ο επόμενος:

5 6 8 17
-7 22 15 3
18 1 21 9

Ζητούμενο είναι η δημιουργία αλγορίθμου που θα ταξινομεί τα στοιχεία του, σε αύξουσα σειρά ώστε το μικρότερο να βρίσκεται στην θέση 1,1 και το μεγαλύτερο στην θέση 3,4. Δηλαδή τα στοιχεία να διατάσσονται γραμμή-προς-γραμμή από το μικρότερο στο μεγαλύτερο. Ο επόμενος πίνακας δείχνει την διάταξη των στοιχείων.

-7 1 3 5
6 8 9 15
17 18 21 22

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

Αλγόριθμος ταξινόμηση_διδιάστατου
   Δεδομένα // Α //
   ! αντιγραφή των στοιχείων σε πίνακα μιας διάστασης (Β)
   k <- 1
   Για i από 1 μέχρι 3
      Για j από 1 μέχρι 4
         B[k] <- A[i,j]
         k <- k + 1
      Τέλος_επανάληψης
   Τέλος_επανάληψης
 
   ! ταξινόμηση του Β
   Για i από 2 μέχρι 12
      Για j από 12 μέχρι i με_βήμα -1
         Αν B[j] < B[j-1] τότε
            αντιμετάθεσε B[j], B[j-1]
         Τέλος_αν
      Τέλος_επανάληψης
   Τέλος_επανάληψης
 
   ! επανατοποθέτηση των στοιχείων στον πίνακα A
   k <- 1
   Για i από 1 μέχρι 3
      Για j από 1 μέχρι 4
         A[i,j] <- B[k]
         k <- k + 1
      Τέλος_επανάληψης
   Τέλος_επανάληψης
 
Τέλος ταξινόμηση_διδιάστατου

2ος τρόπος
Εφαρμογή του αλγορίθμου ταξινόμησης για μονοδιάστατου πίνακα και απ’ ευθείας «μετάφραση» του εκάστοτε στοιχείου στις 2 διαστάσεις, έχοντας υπόψη την εξής παρατήρηση:
1ο στοιχείο = 1η γραμμή, 1η στήλη
2ο στοιχείο = 1η γραμμή, 2η στήλη
3ο στοιχείο = 1η γραμμή, 3η στήλη
4ο στοιχείο = 1η γραμμή, 4η στήλη
5ο στοιχείο = 2η γραμμή, 1η στήλη
………………………….
j στοιχείο = (j – 1) div 4 + 1 γραμμή, (j – 1) mod 4 + 1 στήλη

Αλγόριθμος ταξινόμηση_διδιάστατου
   Δεδομένα // Α //
   Για i από 2 μέχρι 12
      Για j από 12 μέχρι i με_βήμα -1
         ! πρέπει να βρούμε την γραμμή και την στήλη του j και j-1 στοιχείου
         γ1 <- (j - 1) div 4 + 1
         σ1 <- (j - 1) mod 4 + 1
         γ2 <- ((j - 1) - 1) div 4 + 1
         σ2 <- ((j - 1) - 1) mod 4 + 1
 
         Αν A[γ1, σ1] < A[γ2, σ2] τότε
            αντιμετάθεσε Α[γ1, σ1], Α[γ2, σ2]
         Τέλος_αν
      Τέλος_επανάληψης
   Τέλος_επανάληψης
Τέλος ταξινόμηση_διδιάστατου