Τι Είναι το Bucket Sort;
Φαντάσου ότι έχεις πολλά μικρά κουτιά, ή “κουβάδες”, και κάθε κουβάς μπορεί να περιέχει αριθμούς. Το Bucket Sort είναι μια μέθοδος ταξινόμησης που χρησιμοποιεί αυτούς τους κουβάδες για να οργανώσει τα πράγματα.
Πώς Λειτουργεί;
- Δημιουργούμε Κουβάδες: Πρώτα, δημιουργούμε μερικούς κουβάδες. Ο αριθμός των κουβάδων μπορεί να εξαρτάται από τα δεδομένα μας. Για παράδειγμα, αν έχουμε αριθμούς από το 1 έως το 100, μπορεί να χρησιμοποιήσουμε 10 κουβάδες (κάθε κουβάς θα περιέχει αριθμούς από 0-10, 11-20, κλπ.).
- Τοποθετούμε τους Αριθμούς: Στη συνέχεια, βάζουμε κάθε αριθμό στον σωστό κουβά. Για παράδειγμα, αν έχουμε τον αριθμό 25 και έχουμε κουβάδες για αριθμούς 0-10, 11-20, και 21-30, θα βάλουμε τον αριθμό 25 στον κουβά που αντιστοιχεί στο 21-30.
- Ταξινομούμε τους Κουβάδες: Κάθε κουβάς μπορεί να έχει τους αριθμούς του σε τυχαία σειρά. Γι’ αυτό, μέσα σε κάθε κουβά, ταξινομούμε τους αριθμούς με μια άλλη μέθοδο (όπως την απλή ταξινόμηση).
- Συγκεντρώνουμε τα Αποτελέσματα: Τέλος, μαζεύουμε τους αριθμούς από όλους τους κουβάδες και τους βάζουμε σε μία και μόνο λίστα, από τον πρώτο κουβά μέχρι τον τελευταίο.
Ας δούμε ένα απλό παράδειγμα στον κώδικα:
Παράδειγμα Κώδικα σε C#
Ακολουθεί μια απλή υλοποίηση του Bucket Sort στην C#:
using System;
using System.Collections.Generic;
class BucketSortExample
{
static void Main()
{
int[] numbers = { 0.78, 0.17, 0.39, 0.26, 0.72 };
BucketSort(numbers);
Console.WriteLine("Ταξινομημένοι αριθμοί:");
foreach (var num in numbers)
{
Console.Write(num + " ");
}
}
static void BucketSort(double[] array)
{
int n = array.Length;
if (n <= 0)
return;
// Δημιουργούμε τα κουβάδες
List<double>[] buckets = new List<double>[n];
for (int i = 0; i < n; i++)
{
buckets[i] = new List<double>();
}
// Τοποθετούμε τους αριθμούς στους κουβάδες
foreach (var num in array)
{
int index = (int)(num * n); // Υπολογίζουμε σε ποιον κουβά να βάλουμε τον αριθμό
buckets[index].Add(num);
}
// Ταξινομούμε τους κουβάδες και τους συγκεντρώνουμε
int pos = 0;
foreach (var bucket in buckets)
{
bucket.Sort(); // Ταξινόμηση των αριθμών μέσα στον κουβά
foreach (var num in bucket)
{
array[pos++] = num;
}
}
}
}
Τι Κάνει ο Κώδικας;
- Δημιουργεί Κουβάδες: Δημιουργεί μία λίστα με 5 κουβάδες (επειδή έχουμε 5 αριθμούς).
- Τοποθετεί Αριθμούς: Για κάθε αριθμό, υπολογίζει σε ποιον κουβά να τον βάλει με βάση την τιμή του αριθμού.
- Ταξινομεί Κουβάδες: Στη συνέχεια, ταξινομεί κάθε κουβά και μαζεύει τους αριθμούς από όλους τους κουβάδες.
- Εμφανίζει Αποτελέσματα: Εκτυπώνει την τελική ταξινομημένη λίστα.
Αυτό είναι το Bucket Sort! Χρησιμοποιεί κουβάδες για να οργανώσει τους αριθμούς και μετά τους ταξινομεί για να δημιουργήσει μία τελική, ταξινομημένη λίστα. Είναι πολύ χρήσιμο όταν έχουμε αριθμούς που κυμαίνονται σε περιορισμένο εύρος τιμών.