0

数组包含首先增加值然后减少值的整数。目前尚不清楚数字何时开始减少。编写高效的代码将第一个数组中的数字复制到另一个数组,以便第二个数组按升序排序。

代码如下:

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;
}

这里的循环不变量是什么?

4

2 回答 2

1

循环不变量是在循环的每次迭代之前和之后都成立的东西。这包括循环终止之后和开始之前。它们中有不少,尽管它们中的大多数并不重要。您将需要选择一个有助于证明算法正确的算法。一个循环不变量将是:

长度为k的子数组b由数组a中的项目组成,但按排序顺序。

在证明此不变量时,您将希望为数组b显示 elementi+1大于 element i

于 2015-05-28T04:45:29.663 回答
0

不变量是 while 循环中的条件,所以i <= j.

循环的不变量是在每次重复之前(和之后)保持的属性

来源:维基

于 2015-05-28T04:18:50.680 回答