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,但用我们自己的排序算法。