C# 泛型问题排序

C# 泛型问题排序,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(

在一次采访中,他们告诉我

将代码写在括号中,以便对列表进行排序。他们说顺序,但你不知道类型是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()
        {
            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])