Home   Cover Cover Cover Cover
 

Delegates

../../solutions/2/Sort.cs
using System;

delegate int Comparer(object x, object y);

class Fraction {
  public int a, b;
  public Fraction(int a, int b) { this.a = a; this.b = b; }
  public override string ToString() { return a + "/" + b; }
}

class Test {
  
  static int CompareFraction(object x, object y) {
    Fraction f1 = (Fraction)x;
    Fraction f2 = (Fraction)y;
    float fract1 = (float)f1.a / f1.b;
    float fract2 = (float)f2.a / f2.b;
    if (fract1 < fract2) return -1;
    else if (fract1 > fract2) return 1;
    else return 0;
  }
  
  static int CompareString(object x, object y) {
    return ((string)x).CompareTo(y);
  }
  
  static void Sort(object[] a, Comparer compare) {
    // selection sort
    for (int i = 0; i < a.Length-1; i++) {
      int min = i;
      for (int j = i+1; j < a.Length; j++) {
        if (compare(a[j], a[min]) < 0) min = j;
      }
      if (min != i) { object x = a[i]; a[i] = a[min]; a[min] = x; }
    }
  }
  
  public static void Main() {
    Fraction[] a = { new Fraction(1,2), new Fraction(3,4), new Fraction(4,8), new Fraction(8,3)};
    string[] b = {"pears", "apples", "oranges", "bananas", "plums"};

    Sort(a, new Comparer(CompareFraction));
    foreach (Fraction f in a) Console.Write(f + " ");
    Console.WriteLine();

    Sort(b, new Comparer(CompareString));
    foreach (string s in b) Console.Write(s + " ");
    Console.WriteLine();
  }
}