刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!
简答题
请阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。
[C代码]
```c
#include
void quicksort(int a[], int n) {
int i, j;
int pivot = a[0]; // 设置基准值
i = 0; j = n-1;
while (i < j) {
// 大于基准值者保持在原位置
while (i < j && _______ ) j--;
if (i < j) { a[i] = a[j]; i++; }
// 不大于基准值者保持在原位置
while (i < j && _______ ) i++;
if (i < j) { a[j] = a[i]; j--; } // 注意这里的j--是错误的,应该是i++
}
a[i] = pivot; // 基准元素归位
if (i > 0) quicksort(_______ ); // 递归地对左子序列进行快速排序
if (n - i - 1 > 0) quicksort(_______ ); // 递归地对右子序列进行快速排序
}
int main() {
int i, arr[] = {23, 56, 9, 75, 18, 42, 11, 67};
quicksort(arr, sizeof(arr)/sizeof(int)); // 调用quicksort对数组arr[]进行排序
for (i = 0; i < sizeof(arr)/sizeof(int); i++) printf("%d\t", arr[i]); // 输出排序后的数组元素
return 0;
}
```
使用微信搜索喵呜刷题,轻松应对考试!
答案:
a[j]>pivot 或 a[j]>=pivot 或等价形式 a[i]<=pivot 或 a[i]<pivot 或等价形式 quicksort(a,i) 或 quicksort(a,j) 或等价形式 quicksort(a+i+1,n-i-1) 或 quicksort(a+j+1,n-j-1) 或等价形式 注:a+i+1可表示为&a[i+1],a+j+1可表示为&a[j+1] arrsizeof(arr)/sizeof(int) 注:sizeof(arr)/sizeof(int)可替换为8
解析:
这道题目是关于快速排序算法的C语言实现。快速排序是一种高效的排序算法,基于分治法思想。
解析如下:
-
在第一个空(1)处,需要判断元素是否大于基准值pivot,所以应填写“a[j]>pivot”或等价形式如“a[j]>=pivot”。
-
在第二个空(2)处,需要判断元素是否小于等于基准值pivot,所以应填写“a[i]<=pivot”或等价形式如“a[i]<pivot”。
-
在第三个空(3)处,需要对左子序列进行递归排序,左子序列从数组的开始到基准值的位置i,所以应填写“quicksort(a,i)”或等价形式如使用指针表示的地址“&a[0]”。
-
在第四个空(4)处,需要对右子序列进行递归排序,右子序列从基准值的下一个位置开始到数组的末尾,因此应填写“quicksort(a+i+1,n-i-1)”或等价形式如使用指针表示的地址“&a[j+1]”。注意这里的“a+i+1”可以理解为数组元素的地址操作。
-
在main函数中调用quicksort函数时,需要传入数组名和数组元素个数作为参数,所以空(5)处应填写数组名和计算数组元素个数的表达式,如“arr,sizeof(arr)/sizeof(int)”或等价形式。同时注意到sizeof(arr)/sizeof(int)计算的是数组元素个数,这里可以替换为具体的数字8,因为给定的数组arr有8个元素。
综上所述,根据题目的要求和提供的参考答案,已经对C代码中的空缺进行了正确的填补。
创作类型:
原创
本文链接:请阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 [说明] 对一个整数序列进
版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!



