चाल एक स्थिर प्रकार को लागू करने के लिए है। मैंने एक विजेट वर्ग बनाया है जिसमें आपका परीक्षण डेटा हो सकता है:
public class Widget : IComparable
{
int x;
int y;
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
public Widget(int argx, int argy)
{
x = argx;
y = argy;
}
public int CompareTo(object obj)
{
int result = 1;
if (obj != null && obj is Widget)
{
Widget w = obj as Widget;
result = this.X.CompareTo(w.X);
}
return result;
}
static public int Compare(Widget x, Widget y)
{
int result = 1;
if (x != null && y != null)
{
result = x.CompareTo(y);
}
return result;
}
}
मैंने IComparable को लागू किया है, इसलिए इसे List.Sort () द्वारा अस्थिर किया जा सकता है।
हालाँकि, मैंने स्टैटिक विधि की तुलना भी की, जिसे एक खोज विधि के प्रतिनिधि के रूप में पारित किया जा सकता है।
मैंने इस प्रविष्टि प्रकार को C # 411 से उधार लिया है :
public static void InsertionSort<T>(IList<T> list, Comparison<T> comparison)
{
int count = list.Count;
for (int j = 1; j < count; j++)
{
T key = list[j];
int i = j - 1;
for (; i >= 0 && comparison(list[i], key) > 0; i--)
{
list[i + 1] = list[i];
}
list[i + 1] = key;
}
}
आप इसे अपने प्रश्नों में उल्लिखित क्रमवार सहायक वर्ग में रखेंगे।
अब, इसका उपयोग करने के लिए:
static void Main(string[] args)
{
List<Widget> widgets = new List<Widget>();
widgets.Add(new Widget(0, 1));
widgets.Add(new Widget(1, 1));
widgets.Add(new Widget(0, 2));
widgets.Add(new Widget(1, 2));
InsertionSort<Widget>(widgets, Widget.Compare);
foreach (Widget w in widgets)
{
Console.WriteLine(w.X + ":" + w.Y);
}
}
और यह आउटपुट:
0:1
0:2
1:1
1:2
Press any key to continue . . .
यह शायद कुछ गुमनाम प्रतिनिधियों के साथ साफ किया जा सकता है, लेकिन मैं आपको छोड़ दूंगा।
संपादित करें : और NoBugz अनाम तरीकों की शक्ति को प्रदर्शित करता है ... इसलिए, मेरा और अधिक सुनहरा विचार करें: पी