// Quicksort: sorts arr[a..b] using delegate cmp to compare elements private static void Qsort <T>(T[] arr, DComparer <T> cmp, int a, int b) { if (a < b) { int i = a, j = b; T x = arr[(i + j) / 2]; do { while (cmp(arr[i], x) < 0) { i++; // Call delegate cmp } while (cmp(x, arr[j]) < 0) { j--; // Call delegate cmp } if (i <= j) { T tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; } } while (i <= j); Qsort <T>(arr, cmp, a, j); Qsort <T>(arr, cmp, i, b); } }
public MainWindowViewModel() { Comparer = new DComparer(); ChangeFirst = new Command(arg => ClickMethod(1)); ChangeSecond = new Command(arg => ClickMethod(2)); }
public static void Main(String[] args) { int[] ia = { 5, 7, 3, 9, 12, 45, 4, 8 }; DComparer <int> intCmp = IntCompare; Qsort <int>(ia, intCmp, 0, ia.Length - 1); foreach (int i in ia) { Console.Write("{0} ", i); } Console.WriteLine(); String[] sa = { "New York", "Rome", "Dublin", "Riyadh", "Tokyo" }; DComparer <String> strCmp = String.Compare; Qsort <String>(sa, strCmp, 0, sa.Length - 1); foreach (String s in sa) { Console.Write("{0} ", s); } Console.WriteLine(); }
public static void Quicksort <T>(T[] arr, DComparer <T> cmp) { Qsort(arr, cmp, 0, arr.Length - 1); }