Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试获取子查询执行的次数_C#_Linq - Fatal编程技术网

C# 尝试获取子查询执行的次数

C# 尝试获取子查询执行的次数,c#,linq,C#,Linq,我有一些代码可以将数组按升序排序 int[] array = new int[] { 4, 3, 5, 1 }; var result = array.GroupBy(x => x) .OrderBy(g => g.Count()) .ThenBy(g => g.Key) .SelectMany(g => g); 我希望能够计算完成排序所需的步骤数。

我有一些代码可以将数组按升序排序

int[] array = new int[] { 4, 3, 5, 1 };
var result = array.GroupBy(x => x)
                    .OrderBy(g => g.Count())
                    .ThenBy(g => g.Key)
                    .SelectMany(g => g);

我希望能够计算完成排序所需的步骤数。 我想解决的具体问题是: 您将得到一个无序数组,该数组由连续整数[1,2,3,…,n]组成,没有任何重复项。您可以交换任意两个元素。您需要找到按升序排序数组所需的最小交换次数

我能找到LINQ使用的掉期数量吗

有可能得到这个吗


例如,如果查询必须将4与1交换以获得1,3,5,4,然后将5与4交换以获得1,3,4,5,那么这将是两个步骤。

我就是这样得出的。我找不到使用LINQ的方法,但是使用我们自己的排序算法。我是这样做的:

static void Main(string[] args)
    {
        ObservableCollection<int> array = new ObservableCollection<int>() {4,3,1,5 };
        int steps = 0;
        array.CollectionChanged+= (sender, e) => 
        {
            Console.WriteLine($"{e.Action} : {string.Join(",", array) }" );
            steps++;
        };

        bool didSwap;
        do
        {
            didSwap = false;
            for (int i = 0; i < array.Count - 1; i++)
            {
                if (array[i] > array[i + 1])
                {
                    int temp = array[i + 1];
                    array[i + 1] = array[i];
                    array[i] = temp;
                    didSwap = true;
                }
            }
        } while (didSwap);


        Console.WriteLine("Sorted Result :");
        foreach(var item in array)
        {
            Console.WriteLine(item);
        }

        Console.WriteLine($"Total Swapps {steps / 2}");

        Console.ReadLine();
    }
这是输出:


计算完成排序所需的步骤数-您能否给出一个基于数组输入的示例输出?但是,如果数组由连续整数组成,则它已按升序排列。您可以实现快速排序,然后在交换完成时进行计数。您需要实现排序算法,并计算算法对数组进行排序所需的运算或交换次数。@Gribbler我删除了以前的测试代码。检验新答案;我不能用linq,但用我们自己的排序算法。