1.向最大神们求助:帮我证明单向选择排序的Select最多赋值次数公式是对的;2.根据不同数组长度求出Select最多赋值次数的数列组合一共有多少种的(公式)
程序代码:void SelectSort(int a[])
{
unsigned LoopTotal = 0, SwapCount = 0, Select, SelectCount = 0;
for (int Index = 0; Index < N - 1; ++Index)
{
Select = Index;
for (int Traverse = Index + 1; Traverse < N; ++Traverse)
{
if (a[Select] > a[Traverse])
{
Select = Traverse;
++SelectCount;
}
++LoopTotal;
}
if (Select != Index)
{
a[Select] ^= a[Index];
a[Index] ^= a[Select];
a[Select] ^= a[Index];
++SwapCount;
}
}
}我说的是Select被赋值最多次数,内循环Select被赋值最多次数计算公式为:(N-1)公差为2的等差数列求和,帮我证明他是对的,2.数组长度有5个元素及5个元素以上,比如1,2,3,4,5 这5个元素有120种组合,其中有6种组合是Select被赋值次数最多的,而6个元素有720种组合,其中有x种组合是Select被赋值次数最多的,帮我把这种组合数量的公式算出来(比如:6个元素时Select被最多赋值次数有多少种组合,7个元素时Select被最多赋值次数有多少种组合...,已知5个元素是6种)
比如长度是5个元素的数列组合,就有6种如下所示的数列,Select被赋值次数是最多的,在外循环Select被赋值为N-1次,在内循环Select最多赋值次数计算公式:(N-1)公差为2的等差数列求和;
如:
3,5,4,2,1 :第一轮循环:Select=3=2=1(内循环赋值两次),第二轮循环:Select=5=4=2(内循环赋值两次),第三轮循环:Select=4=3(内循环赋值一次),第三轮循环:Select=5=4(内循环赋值一次),内循环共6次赋值
5,4,1,3,2 :第一轮循环:Select=5=4=1(内循环赋值两次),第二轮循环:Select=4=3=2(内循环赋值两次),第三轮循环:Select=5=3(内循环赋值一次),第三轮循环:Select=5=4(内循环赋值一次),内循环共6次赋值
5,4,2,1,3 :第一轮循环:Select=5=4=2=1(内循环赋值三次),第二轮循环:Select=4=2(内循环赋值一次),第三轮循环:Select=4=3(内循环赋值一次),第三轮循环:Select=5=4(内循环赋值一次),内循环共6次赋值
4,5,3,2,1 :第一轮循环:Select=4=3=2=1(内循环赋值三次),第二轮循环:Select=5=3=2(内循环赋值两次),第三轮循环:Select=5=4(内循环赋值一次),内循环共6次赋值
5,4,3,1,2 :第一轮循环:Select=5=4=3=1(内循环赋值三次),第二轮循环:Select=4=3=2(内循环赋值两次),第三轮循环:Select=5=4(内循环赋值一次),内循环共6次赋值
5,4,3,2,1 :第一轮循环:Select=5=4=3=2=1(内循环赋值四次),第二轮循环:Select=4=3=2(内循环赋值两次),内循环共6次赋值
[此贴子已经被作者于2025-11-28 05:12编辑过]






