题目
以下是冒泡排序[1]算法对存放在a[1],a[2],...,a[n]中序列按关键字key由小到大排序,完成程序中空格部分。 void bsort (NODE a[], int n) ( int i,j,flag; NODE temp; for (j=1;j< =n-1;j++) { flag=0; for (i=1;i< =n-j;i++) if (__________) { flag=1; temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; ) if (flag==0)break; } } A. `a[i].key >a[i+1].key`B. `a[i].key< a[i+1].key`C. `a[j].key >a[j+1].key`D. `a[j].key< a[j+1].key`
以下是冒泡排序[1]算法对存放在a[1],a[2],...,a[n]中序列按关键字key由小到大排序,完成程序中空格部分。
void bsort (NODE a[], int n)
{ int i,j,flag;
NODE temp;
for (j=1;j< =n-1;j++)
{ flag=0;
for (i=1;i< =n-j;i++)
if (__________)
{ flag=1;
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
if (flag==0)break;
}
}
- A. `a[i].key >a[i+1].key`
- B. `a[i].key< a[i+1].key`
- C. `a[j].key >a[j+1].key`
- D. `a[j].key< a[j+1].key`
题目解答
答案
冒泡排序需将较大值逐步移至末端。在内层循环中,应判断 `a[i].key > a[i+1].key`,若成立则交换。此条件确保升序排列。其他选项中,B 为降序,C 和 D 使用了错误变量 `j`,均不符合要求。最终,正确判断条件为:
```c
if (a[i].key > a[i+1].key)
```
答案:A. `a[i].key > a[i+1].key`
解析
冒泡排序的核心逻辑是通过多次遍历数组,比较相邻元素并交换顺序错误的元素,使较大的元素逐渐“浮”到数组末尾。
- 外层循环(j):控制排序的轮数,每轮将当前最大的元素放到正确位置。
- 内层循环(i):每轮从数组头开始比较相邻元素,若顺序错误则交换。
- flag标记:用于检测是否发生交换,若无交换则提前终止排序。
关键点:内层循环中需判断当前元素是否大于下一个元素(a[i].key > a[i+1].key),若成立则交换,确保升序排列。
选项分析
- 选项A:
a[i].key > a[i+1].key
正确。当当前元素的关键字大于下一个元素时交换,使较大的元素向右移动,最终形成升序。 - 选项B:
a[i].key < a[i+1].key
错误。此条件会导致交换较小元素,形成降序排列。 - 选项C/D:使用
j而非i
错误。内层循环应通过i遍历数组,j仅用于控制外层循环的轮数。