我必须根据n创建一个等式,以找出if(sj< sindex)循环迭代的次数。我可以弄清楚循环迭代的次数,如果我通过手动运行程序已经得到n的值(例如,如果n = 4,循环将迭代6次),但我将如何用术语来表示广义等式的?
for i = 1 to n-1 {
//find smallest in s1, ...., sn
index = i
for j = i + 1 to n
if ( sj < sindex)
index = j
swap( si, sindex)
}
答案 0 :(得分:0)
内部循环从i+1
到n
,即n-i
次。外环为i=1, 2, ... n-1
调用它,即总共n-1 + n-2 + ... n-(n-1)
次。
您需要表达从n-1
到1
的整数之和。这笔款项有n-1
个条款。
Wen n-1
是偶数,你可以将每个(n-1)/2
个术语分为两半:从n-1
到(n+1)/2
和从(n-1)/2
向下到1
。反转第二部分并成对添加,您将获得:(n-1 + 1)+(n-2 + 2)+ ...((n + 1)/ 2 +(n-1)/ 2)。< / p>
所有对总和为n
,其中(n-1)/2
总共为n.(n-1)/2
。
n = 9
的示例:
8 + 7 + 6 + 5 + 4 + 3 + 2 + 1
=
8 + 7 + 6 + 5 +
1 + 2 + 3 + 4
=
9 + 9 + 9 + 9
现在如果n-1
是奇数,n-2
是偶数。您可以通过将n-1
添加到n-2
个第一个整数的总和,即n-1 + (n-1).(n-2)/2 = n.(n-1)/2
来获得答案。
在这两种情况下,n.(n-1)/2
。
检查:4.(4-1)/2 = 6
。