阅读以下说明和代码,填补代码中的空缺,将解答填入对应栏内。 【说明】 对n个元素进行简单选择排序的基本方法是:第一趟从第1个元素开始,在n个元素中选出最小者,将其交换至第一个位置,第二趟从第2个元素开始,在剩下的n-1个元素中选出最小者,将其交换至第二个位

admin2018-11-21  41

问题 阅读以下说明和代码,填补代码中的空缺,将解答填入对应栏内。
【说明】
对n个元素进行简单选择排序的基本方法是:第一趟从第1个元素开始,在n个元素中选出最小者,将其交换至第一个位置,第二趟从第2个元素开始,在剩下的n-1个元素中选出最小者,将其交换至第二个位置,依此类推,第i趟从n-i+1个元素中选出最小元素,将其交换至第i个位置,通过n—1趟选择最终得到非递减排序的有序序列。
【代码】
#include
void selectS0rt(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~data[n-1]中最
                                             小元素的下标
if(data[j]<data[k])  (3)
if(k!=i){
//将本趟找出的最小元素与data交换
temp=data(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);
    printf(’’\n’’);
    return 0;

选项

答案(1)j<n或其等价形式 (2)j++或其等价形式 (3)k=j (4)data[i]=data[k]或*(data+i)=*(data+k)或其等价形式 (5)selectSort(arr,m) 其中,m可替换为8或者sizeof(arr)/sizeof(int) (6)i=0

解析 本题考查C程序的基本结构、运算逻辑和函数调用及应用。
    题干中已明确对简单选择算法作了说明,在实现该排序方法的函数selectSort(int data[],int n)中,第一重循环for(i=0;i<n一1;i++)的作用是控制排序的趟数。在每趟排序过程中,都是从data~data[n一1]中选出最小元素,并用k记录其下标,k的初始值设置为等于i,因此空(1)处应填入“j<n”,使得在该条件下可以遍历选择范围内所有元素,空(2)处应填入“j++”或其等价形式。
    在一趟选择的过程中,只需记下最小元素的下标,因此在满足“data[j]<data[k]”的条件下,需要用k记住j(即更小元素的下标),因此空(3)处应填入“k=j”。
    显然,如果data~data[n-1]中最小元素(即data[k])并不是data时,需要将两者的值交换,因此空(4)应填入“data=data[k]”或其等价形式。
    空(5)处考查函数调用。根据注释,需要调用selectSort对数组arr进行非递减排序,按照selectSort的定义要求,第一个形参本质上需要实参为指针,因此其对应的实参为main函数中的数组arr(数组名表示数组空间的首地址,实质上为常量指针),第二个参数为表示数组元素个数的整数,实参为m、8或sizeof(arr)/sizeof(int)都可以,空(5)处应填入“selectSort(arr,m)”或其等价形式。
    空(6)所在循环语句通过i遍历数组元素并逐个输出,此处填入“i=0”实现对i的初始化。
转载请注明原文地址:https://kaotiyun.com/show/12jZ777K
0

最新回复(0)