Как я могу улучшить эту сортировку вставок? - PullRequest
0 голосов
/ 03 мая 2018

Мне кажется, что это слишком неэффективно для сортировки вставкой. Большинство реализаций, которые я видел, будут иметь цикл while вместо моего второго цикла for. Наряду с этим также то, что эти циклы while завершатся, как только j в моем коде или эквивалент этого будет равен нулю или как только выполнится оператор my if, найденный в цикле for моего кода. Проблема в том, что всякий раз, когда я пытался реализовать подобный код, сортировка вставок не работала должным образом.

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 голосов
/ 03 мая 2018

Вот что делает ваш код:

            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

0 голосов
/ 03 мая 2018

Если вам нужно отсортировать список массивов, вы можете привести его к определенному типу, а затем преобразовать в список. С помощью списка вы можете просто вызвать 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...