共42道题,当前是第33

Description

(排序问题) 陈老师发明了一个排序算法,用于将 $n$ 个整数从小到大排序后输出。下面是他编写的排序代码,但是有一部分丢失了。

试补全下方的排序代码,使其能够将 $n$ 个整数从小到大排序后输出。

1	#include 
2	using namespace std;
3	int main() {
4	    int n, a[101], i, t;
5	    cin >> n;
6	    for (i = 0; i < n; i++)
7	        cin >> a[i];
8	    ___ (1) ___ = 1;
9	    while ( ___ (2) ___ ) {
10	        if (i==0 || ___ (3) ___ ) {
11	            i++;
12	        }
13	        else {
14	            t = a[i];
15	            a[i] =  ___ (4) ___ ;
16	            a[i-1] = t;
17	             ___ (5) ___ ;
18	        }
19	    }
20	    for (i = 0; i < n; i++)
21	        cout << a[i] << endl;
22	    return 0;
23	}

1. A。需要将循环变量 $i$ 进行初始化。
2. C。数组下标从 $0$ 到 $n-1$,所以循环的条件是 $i < n$。
3. C。程序的目的是不断地比较 $a[i-1]$ 和 $a[i]$,若 $a[i-1] > a[i]$ 则交换 $a[i-1]$ 和 $a[i]$,所以当 $a[i-1]<=a[i]$,则不用交换,直接 $i++$ 即可。
4. B。第 $14 \sim 16$ 行使用三步交换法交换 $a[i]$ 和 $a[i-1]$ 的数值。
5. C。在 (5) 处填写 $i=0$ 或 $i=1$ 程序仍然能够正常运行,但是通过分析可以发现,若设 $i'$ 为目前 $i$ 变化成的最大的值,则 $a[1] \sim a[i'-1]$ 已满足升序,所以及时将 $i$ 重置为 $0$ 或 $1$,它仍会不停自增到 $i'$ 并根据条件进行交换与自减操作,所以执行 $i=0$ 或 $i=1$ 的计算量总是大

Question

___ (1) ___ 处应填( )

___ (2) ___ 处应填( )

___ (3) ___ 处应填( )

___ (4) ___ 处应填( )

___ (5) ___ 处填写( )可以使程序运行地最快。

陈伦制作 版权所无 粤ICP备16127491号-1