阅读以下说明和C代码,回答问题,将解答写入对应栏内。 【说明】 函数bubbleSort(int arr[],int n,int(*compare)(int,int))的功能是根据调用时传递的比较函数compare对数组arr的前n个元素进行排序。

admin2021-03-13  28

问题 阅读以下说明和C代码,回答问题,将解答写入对应栏内。
【说明】
    函数bubbleSort(int arr[],int n,int(*compare)(int,int))的功能是根据调用时传递的比较函数compare对数组arr的前n个元素进行排序。
【C代码】
#define swap(a,b)  {a=a^b;b=a^b;a=a^b;}  //交换a与b的值
int less(int x,  int y)
{
return  ((x<y)  ?  1 :0);
}
int larger(int x,int y)
{
      return  ((x>y)  ?  1 :0);
}
void bubbleSort(int arr[],int n,Int(*compare)(int,int))
{    int i,j;
       int swapped=1;
       for(i=0;swapped;i++) {
           swapped=0;
           for(j=0;j<n-1-i;j++)
              if(compare(arr[j+1],arr[j])) {
                swap(arr[j+1],arr[j]);
                swapped=1;
               }
       }
}
【问题】
    设有如下数组定义:
    int data1[]={4,2,6,3,1};
    int data2[]={4,2,6,3,1};
    int data3[]={4,2,6,3,1};
    请分别给出下面的函数调用执行后,数组data1、data2和data3各自的元素序列。
    (1)bubbleSort(data1,5,less);
    (2)bubbleSort(data2,5,larger);
    (3)bubbleSort(data3,3,larger);

选项

答案(1)1 2 3 4 6或{1,2,3,4,6} (2)6 4 3 2 1或{6,4,3,2,1} (3)6 4 2 3 1 或{6,4,2,3,1}

解析 本题考查C程序基本控制逻辑、函数调用及其应用。
    函数bubbleSort(int arc[],int n,int(*compare)(int,int))的第一个参数表示arr是一个数组,第二个参数n表示数组的前n个元素,第三个参数compare是函数指针,在函数体中实现compare(arr[j+1],arr[j])的具体结果需要根据调用bubbleSort时的第3个实参来确定。
    对于调用bubbleSort(data1,5,less),arr表示的是data1数组,在排序时compare(arr[j+1],arr[j])操作实质实现的是less(arr[j+1],arr[j]),也就是arr[j+1]<arr[j]时返回值为1,从而需要交换arr[j+1]和arr[j]的值,其结果是较小的值换至下标小的数组元素中,因此bubbleSort实现了data1数组的全部5个元素从小到大的排列。
    对于调用bubbleSort(data2,5,larger),arr表示的是data2数组,compare(arr[j+1],arr[j])操作实质实现的是larger(arr[j+1],arr[j]),也就是arr[j+1]<arr[j]时返回值为1,从而需要交换arr[j+1]和arr[j]的值,其结果是较大的值换至下标小的数组元素中,因此bubbleSort实现了data2数组的全部5个元素从大到小的排列。
    对于调用bubbleSort(data3,3,larger),arr表示的是data3数组,compare(arr[j+1],arr[j])操作实质实现的是larger(arr[j+1],arr[j]),也就是arr[j+1]>arr[j]时返回值为1,从而需要交换arr[j+1]和arr[j]的值,其结果是较大的值换至下标小的数组元素中,因此bubbleSort实现了data3数组的前3个元素从大到小的排列。
转载请注明原文地址:https://kaotiyun.com/show/j2jZ777K
0

相关试题推荐
最新回复(0)