C# 泛型问题排序
在一次采访中,他们告诉我 将代码写在括号中,以便对列表进行排序。他们说顺序,但你不知道类型是int还是decimal 他们还告诉我不要使用.sort之类的框架方法 所以我不知道我该怎么做?我需要为下次有人问我这个问题做好准备 可能的输入:7,3,8,6,1 或:6.9、4.5、2.3、6.1、9.9C# 泛型问题排序,c#,.net,generics,C#,.net,Generics,在一次采访中,他们告诉我 将代码写在括号中,以便对列表进行排序。他们说顺序,但你不知道类型是int还是decimal 他们还告诉我不要使用.sort之类的框架方法 所以我不知道我该怎么做?我需要为下次有人问我这个问题做好准备 可能的输入:7,3,8,6,1 或:6.9、4.5、2.3、6.1、9.9 namespace InterViewPreparation1 { public partial class Form1 : Form { public Form1(
namespace InterViewPreparation1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSort_Click(object sender, EventArgs e)
{
List<int> list= new List<int>();
list.Add(int.Parse(i1.Text));
list.Add(int.Parse(i2.Text));
list.Add(int.Parse(i3.Text));
list.Add(int.Parse(i4.Text));
list.Add(int.Parse(i5.Text));
Sort(list);
}
private void Sort<T>(List<T> list)
{
bool madeChanges;
int itemCount = list.Count;
do
{
madeChanges = false;
itemCount--;
for (int i = 0; i < itemCount; i++)
{
int result = Comparer<T>.Default.Compare(list[i], list[i + 1]);
if (result > 0)
{
Swap(list, i, i + 1);
madeChanges = true;
}
}
} while (madeChanges);
}
public List<T> Swap<T>(this List<T> list,
int firstIndex,
int secondIndex)
{
T temp = list[firstIndex];
list[firstIndex] = list[secondIndex];
list[secondIndex] = temp;
return list;
}
}
}
这取决于你不使用框架方法的底线到底有多远。还是应该对原始内存使用逻辑探测?坦白地说,不仅仅是使用列表。排序是愚蠢的,这是一个糟糕的面试问题,依我看;我会说不,我使用的是list.Sort——它存在并且很好地完成了工作 但是!另一种方法是:
var comparer = System.Collections.Generic.Comparer<T>.Default;
现在您有了一个类型安全比较器,它可以用于任何具有可排序性的T。调用.Compare lot times以按顺序排列的行为留作练习,任何教科书排序策略都可以使用comparer.Comparex,y.以及两者和实现-这意味着在执行排序时,您应该将每个元素强制转换为IComparable。由于您不能使用任何标准的.Net排序方法,您需要自己实现一种。看看有没有灵感
如果方法签名不同,则更容易:
public void sortlist<T>(List<T> list)
where T : IComparable
{
}
为什么你的列表上没有通用参数?既然你不再参加面试,你可以使用谷歌。您自己尝试过什么?只需使用iList[i]
for (int pass = 1; pass < list.Count; pass++)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i].CompareTo(list[i + 1]) > 0)
{
// Swap
T temp = list[i];
list[i] = list[i + 1];
list[i + 1] = temp;
}
}
}
Comparer<T>.Default.Compare(list[i], list[i + 1])