1.向最大神们求助:帮我证明单向选择排序的Select被赋值最多次数的公式是对的,2.根据不同数组长度求出Select被赋值最多数次的数列组合一共有多少种的(公式)

振帆 黄 0 信誉分
2025-11-27T02:29:26.3+00:00
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次赋值
开发人员技术 | C++
开发人员技术 | C++
一种通用的高级编程语言,作为 C 编程语言的扩展而创建,除了用于低级别内存操作的功能外,还具有面向对象、泛型和功能性等特点。
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. SSmmrg 5 信誉分
    2025-11-30T01:08:03.1+00:00

    1.你说的内循环select被赋值最多次数是(N-1)公差为2的等差数列求和是对的,但是更准确来说是从(N-1)开始,每次减2,直到不能减为止然后求和
    第二题我也有点搞不懂

    0 个注释 无注释

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。