案例分析题

试题二
阅读以下说明和代码, 填补代码中的空缺, 将解答填入答题纸的对应栏内。

【说明】
对 n 个元素进行简单选择排序的基本方法是: 第一趟从第 1 个元素开始, 在 n 个元素中选出最小者, 将其交换至第一个位置, 第二趟从第 2 个元素开始, 在剩下的 n-1 个元素中选出最小者, 将其交换至第二个位置, 依此类推, 第 i 趟从 n-i+1 个元素中选出最小元素, 将其交换至第 i 个位置, 通过 n-1 趟选择最终得到非递减排序的有序序列。

【代码】
#include <stdio.h>
void selectSort(int data[ ],int n)
//对 data[0]~data[n-1]中的 n 个整数按非递减有序的方式进行排列
{
int i,j,k;
int temp;
for(i=0;i<n-1;i++){
for(k=i,j=i+1;(1) ;(2) ) //k 表示 data[i]~data[n-1]中最小元素的下标
if(data[j]<data[k]) (3)
if(k!=i) {
//将本趟找出的最小元素与 data[i]交换
temp=data[i]; (4) ;data[k]=temp;
}
}
}
int main()
{
int arr[ ]={79,85,93,65,44,70,100,57};
int i,m;
m=sizeof(arr)/sizeof(int); //计算数组元素的个数, 用 m 表示
(5) ; //调用 selectSort 对数组 arr 进行非递减排序
for((6) ;i <m;i++) //按非递减顺序输出所有的数组元素
printf(“%d\t”,arr[i]);
printf(“\n”);
return 0;
}

【正确答案】

(1)j<n 或者 j<=n-1
(2) j++
(3) k=j
(4) data[i]=data[k]
(5)selectSort(arr,m)此处m也可以填8 或者sizeof(arr)/sizeof(int), arr可以改成&arr[0]
(6) i=0

【答案解析】

本题考查 C 程序设计基本技能及应用。 简单选择排序方法是设所排序序列的记录个数为 n。 i 取 1,2,…,n-1,从所有 n-i+1 个记录(Ri,Ri+1,…,Rn) 中找出排序码最小的记录, 与第 i 个记录交换。 执行 n-1 趟后就完成了记录序列的排序。
第 1 空应填 j 循环结束条件, j 应该运行至序列末尾。 填 j<n 或者 j<=n-1;
第 2 空填 j 循环控制语句, j 每次递增 1, 往后移动一个元素与 a[i]进行比较。
第 3 空为自动保存最大元素的下标, k=j。
第 4 空为交换两个元素, temp 为临时变量, 保存 data[i]的值, 使用 data[i]=data[k]使 data[i]为后面 n-i+1 个记录(Ri,Ri+1,…,Rn) 中找出排序码最小的记录, 再将 temp赋给 data[k]。
第 5 空为调用 selectSort 对数组 arr 进行非递减排序, selectSort 有两个参数, 数组和排序元素个数, 为 selectSort(arr,m)。
第 6 空进行元素遍历输出所有的数组元素, 从下标为 0 开始, 所以填 i=0。