案例分析题

【说明】
函数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-l-i; j++)
if ( compare( arr[j+1], arr[j])) {
swap( arr[j+1], arr[j]);
swapped =1;
}
}
}

 阅读以下说明和C代码,回答问题,将解答写入答题纸的对应栏内。
设有如下数组定义:
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}
(2){6,4,3,2,1}
(3){6,4,2,3,1}

【答案解析】

swap函数是将两元素值进行相互交换。
less函数是判断x和y的关系,如果x large函数是判断x和y的关系,如果x>y,则函数值为真。
在bubbleSort函数中,第二个参数表示进行比较元素的个数,第三个参数表示进行排序的方式,如果传入less函数,则是从小到大排序;如果传入large函数,则是从大到小排序。