// Этот метод теперь изменяет свои аргументы. public void swap(ref RefSwap ob1, ref RefSwap ob2) { RefSwap t; t = ob1; ob1 = ob2; ob2 = t; }
private static T PartitionOnIndexK <T>(T[] items, int k, int start, int end) where T : IComparable <T> { RefSwap <T> Swap = (ref T o1, ref T o2) => { var temp = o1; o1 = o2; o2 = temp; }; var kth = items[k]; Swap(ref items[k], ref items[end]); var left = start; for (var i = start; i < end; i++) //items[end] holds the kth value. { if (items[i].CompareTo(kth) < 0) { Swap(ref items[left++], ref items[i]); } } Swap(ref items[left], ref items[end]); return(left == k ? items[k] : ((left < k) ? PartitionOnIndexK(items, k, left + 1, end) : PartitionOnIndexK(items, k, start, left - 1))); }
// This method changes its arguments. public void Swap(RefSwap ob1, RefSwap ob2) { RefSwap t; t = ob1; ob1 = ob2; ob2 = t; }
static void Main(string[] args) { RefSwap x = new RefSwap(1, 2); RefSwap y = new RefSwap(3, 4); Console.WriteLine("До вызова"); Console.Write("x ->"); x.Show(); Console.Write("y ->"); y.Show(); Console.WriteLine("После вызова Swap"); x.Swap(ref x, ref y); Console.Write("x ->"); x.Show(); Console.Write("y ->"); y.Show(); Console.ReadLine(); }
public static void Main() { RefSwap x = new RefSwap(1, 2); RefSwap y = new RefSwap(3, 4); Console.Write("x перед вызовом: "); x.show(); Console.Write("y перед вызовом: "); y.show(); Console.WriteLine(); // Обмениваем объекты, на которые ссылаются x и y. x.swap(ref x, ref y); Console.Write("x после вызова: "); x.show(); Console.Write("y после вызова: "); y.show(); }
static void Main() { RefSwap x = new RefSwap(1, 2); RefSwap y = new RefSwap(3, 4); Console.Write("x before call: "); x.Show(); Console.Write("y before call: "); y.Show(); Console.WriteLine(); // Exchange the objects to which x and y refer. x.Swap(ref x, ref y); Console.Write("x after call: "); x.Show(); Console.Write("y after call: "); y.Show(); }