数组包含首先增加值然后减小值的整数。目前尚不清楚数字何时开始减少。编写有效的代码将第一个数组中的数字复制到另一个数组,以便第二个数组按升序排序。
代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
int a[10] = { 17, 24, 31, 39, 44, 49, 36, 29, 20, 18 };
int b[10];
int i = 0, j = 9, k = 0;
while (i <= j) {
if (a[i] < a[j]) {
b[k++] = a[i++];
}
else {
b[k++] = a[j--];
}
}
return 0;
}
这里的循环不变量是什么?
答案 0 :(得分:1)
循环不变量在循环的每次迭代之前和之后都是正确的。这包括在循环终止之后和开始之前。虽然其中大多数并不重要,但它们中有相当多。您将需要选择一个有助于证明算法正确的方法。对此的循环不变量将是:
长度 k 的子阵列 b 由数组 a 中的项目组成,但是按排序顺序排列。
在证明此不变量时,您需要为数组 b 显示元素i+1
大于元素i
。
答案 1 :(得分:0)