如何改进此插入排序?

时间:2018-05-03 09:59:01

标签: c# loops sorting for-loop arraylist

我觉得这对于插入排序来说效率太低了。我见过的大多数实现都会有一个while循环代替我的第二个for循环。除此之外,那些while循环将在我的代码中终止一次j,或等效的,等于零,或者在我的代码的for循环中找到的if语句被执行。问题是每当我尝试实现这样的代码时,我的插入排序都无法正常工作。

getVisitCount只返回类网页的整数。 AL是一个ArrayList。

public void IS()
    {
        Console.WriteLine("Sorting ArrayList.");
        for (int i = 1; i < AL.Count; i++)
        {
            for (int j = i; j > 0; j--)
            {
                Webpage EntryJ = (Webpage)AL[j];
                Webpage EntryBefore = (Webpage)AL[j - 1];

                if (EntryBefore.getVisitCount() < EntryJ.getVisitCount())
                {
                    Webpage temp = EntryBefore;
                    AL[j - 1] = AL[j];
                    AL[j] = temp;
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

如果需要对数组列表进行排序,可以将其转换为特定类型,然后将其转换为列表。使用列表,您只需调用LINQ OrderBy即可获得有序列表:

public class Webpage
{
    public int getVisitCount()
    {
        return DateTime.Now.Second * 2;
    }

    public static List<Webpage> Sort(ArrayList AL)
    {
        var list = AL.Cast<Webpage>().ToList();
        var ordered = list.OrderBy(x => x.getVisitCount());

        return list;
    }
}

答案 1 :(得分:-1)

以下是您的代码正在执行的操作:

            int[] AL = { 4, 3, 2, 1 };
            for (int i = 1; i < AL.Count(); i++)
            {
                for (int j = i; j > 0; j--)
                {
                    if (AL[j-1] < AL[j])
                    {
                        int temp = AL[j -1];
                        AL[j - 1] = AL[j];
                        AL[j] = temp;

                    }
                    Console.WriteLine("i = '{0}', j = '{1}', array = '{2}'", i.ToString(), j.ToString(),string.Join(",", AL.Select(x => x.ToString())));
                }
            }
            Console.ReadLine();

enter image description here